Maison >cadre php >PensezPHP >ThinkPHP comment incrémenter et décrémenter plusieurs champs en même temps

ThinkPHP comment incrémenter et décrémenter plusieurs champs en même temps

咔咔
咔咔original
2021-01-04 18:10:103417parcourir
«

Cet article expliquera comment augmenter et diminuer plusieurs champs en même temps

»

Avant-propos

Récemment, Xiao Q s'est rendu à un entretien, puis a posé la question suivante : comment augmenter et diminuer plusieurs champs en même temps.

Petit Q n'a pas pu répondre pendant un moment, et le résultat final a été de rentrer chez lui et d'attendre une notification....

Kaka donnera à Petit Q une réponse simple à cette question.

1. Implémentation du framework ThinkPHP

Le framework que Xiao Q connaît le mieux est ThinkPHP, alors Kaka utilisera d'abord ThinkPHP pour résoudre ce problème.

Tout d'abord, pour résoudre ce problème, vous devez avoir une certaine compréhension des inc et setInc du framework. Dans le framework, ces deux fonctions sont utilisées pour incrémenter ou décrémenter.

Mais il y a une différence entre les deux. inc est une méthode dans la classe Db, et setInc appelle en fait la méthode dans le modèle, mais à la fin la méthode du fichier thinkphp/library/think/db/Query.php est utilisée.

Je ne lirai pas le code source de cette pièce, mais j'en parlerai plus tard ! Résolvons d'abord le problème immédiat, Xiao Q est très anxieux.

Lors de l'écriture de méthodes d'auto-augmentation, tout le monde utilisera-t-il toujours setInc comme Xiao Q ? C'est ce que Xiao Q a pensé lorsqu'il a reçu cette question.

ThinkPHP comment incrémenter et décrémenter plusieurs champs en même temps
Plan initial

Lors de sa visite, il apparaîtra sans pitié et donnera à Little Q un coup douloureux.

ThinkPHP comment incrémenter et décrémenter plusieurs champs en même temps
Message d'erreur

Cette méthode n'est donc pas réalisable, mais que dois-je faire si je souhaite quand même implémenter cette fonction !

Ne vous inquiétez pas, Kaka vous emmènera visiter le Nouveau Monde.

Utilisez directement les deux méthodes inc pour incrémenter ou décrémenter plusieurs champs, de sorte que l'idée de Kaka est également simplement dérivée du code source.

ThinkPHP comment incrémenter et décrémenter plusieurs champs en même temps
Solution finale

Ou peut-être que tout le monde a utilisé deux méthodes Where dans une seule requête lors de l'utilisation du framework thinkphp ! En fait, les idées sont les mêmes puisque les deux peuvent implémenter des requêtes.

Ensuite, les deux inc devraient également être capables d'implémenter plusieurs champs pour l'auto-incrémentation ou l'auto-décrémentation.

La solution finale de Kaka est donc la solution indiquée ci-dessus.

2. Feuilletez le code source

Dans le processus, Kaka a encore fouillé ennuyé sur inc. processus de mise en œuvre.

Dans la figure ci-dessous, nous regardons principalement les explications données sur les paramètres. Vous pouvez voir que le premier paramètre peut être un tableau ou une chaîne.

Mais selon le code, vous constaterez que même si plusieurs champs peuvent augmenter ou diminuer, la taille du pas est une valeur.

La méthode fournie par le framework est donc 可以同时自增或者自减多个字段,但是值只能是固定的.

ThinkPHP comment incrémenter et décrémenter plusieurs champs en même temps
inc code source

Si vous souhaitez implémenter plusieurs champs et plusieurs étapes, vous devez modifier le code source pour résoudre ce problème.

ThinkPHP comment incrémenter et décrémenter plusieurs champs en même temps
Par exemple, si vous souhaitez implémenter plusieurs champs correspondant à plusieurs étapes

Voici le contenu de Kaka après modification du code source, qui peut être comparé à l'image du code source inc. Faire des comparaisons.

Le code source modifié par Kaka est principalement la zone encerclée, car la valeur de step est directement définie comme 1 dans le code source.

Vous devez donc modifier ce bloc et utiliser is_array pour détecter si la variable est un tableau.

ThinkPHP comment incrémenter et décrémenter plusieurs champs en même temps
Modifier le code source

Après les opérations ci-dessus, vous pouvez augmenter ou diminuer plusieurs champs et plusieurs étapes.

Il n'est pas recommandé d'utiliser Kaka pour modifier directement le code source. C'est juste que nous devons apprendre à trouver une solution dans le code source à un problème.

Donc, pour le problème de l'incrémentation et de la décrémentation de plusieurs champs en même temps, il est recommandé d'utiliser la première solution.

Après tout, cette situation est minoritaire, et vous vous retrouverez gâché si vous changez les bases du cadre.

3. Utilisez des instructions SQL pour implémenter

Si vous souhaitez résoudre le problème, vous n'en avez pas besoin. pour lire cette section Oui, regardez simplement la première section et vous pourrez parfaitement résoudre votre problème.

Kaka aime réfléchir à un problème et utiliser plusieurs solutions pour le résoudre.

Ensuite, Kaka utilisera des instructions SQL pour mener une analyse approfondie de ce problème.

Maintenant que nous avons implémenté le plan d'implémentation dans la première section, il existe une méthode fetchSql() dans le framework qui peut imprimer directement l'instruction SQL.

Ensuite, regardons à quoi ressemble cette instruction SQL.

<span style="display: block; background: url(https://files.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #282c34; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #abb2bf; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; padding-top: 15px; background: #282c34; border-radius: 5px;"><span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">UPDATE</span> <span class="hljs-string" style="color: #98c379; line-height: 26px;">`table`</span>  <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">SET</span> <span class="hljs-string" style="color: #98c379; line-height: 26px;">`filed1`</span> = <span class="hljs-string" style="color: #98c379; line-height: 26px;">`filed1`</span> + <span class="hljs-number" style="color: #d19a66; line-height: 26px;">200</span> , <span class="hljs-string" style="color: #98c379; line-height: 26px;">`filed2`</span> = <span class="hljs-string" style="color: #98c379; line-height: 26px;">`filed2`</span> + <span class="hljs-number" style="color: #d19a66; line-height: 26px;">86</span>  <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">WHERE</span>  <span class="hljs-string" style="color: #98c379; line-height: 26px;">`time`</span> <br/><span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">BETWEEN</span> <span class="hljs-number" style="color: #d19a66; line-height: 26px;">1609689600</span> <span class="hljs-keyword" style="color: #c678dd; line-height: 26px;">AND</span> <span class="hljs-number" style="color: #d19a66; line-height: 26px;">1609775999</span><br/></code>

Ce qui précède est l'instruction SQL imprimée à l'aide de la méthode fournie par le framework. Le nom de la table et le champ ont été modifiés. Vous pouvez le modifier directement en champ que vous devez augmenter ou diminuer.

ThinkPHP comment incrémenter et décrémenter plusieurs champs en même temps
Plan de mise en œuvre de SQL natif

L'utilisation de cette instruction SQL peut résoudre le sujet de cet article, Kaka n'a donc pas donné une série de captures d'écran des résultats d'impression . Si vous êtes intéressé, vous pouvez le tester vous-même.

Comme le dit le proverbe, si vous vous contentez de parler mais ne pratiquez pas de faux mouvements, vous devez quand même beaucoup vous entraîner par vous-même.

Ce qui précède est implémenté dans le framework utilisant SQL natif pour incrémenter et décrémenter simultanément plusieurs champs et plusieurs étapes.

Résumé

Ce problème est en fait de nature très simple, et le framework fournit également les méthodes correspondantes. besoin de directement Appelez-le.

Le problème est que vous savez combien de méthodes d'auto-incrémentation ou d'auto-décrémentation sont fournies par le framework. Le framework fournit deux méthodes, inc et setInc.

Si vous ne connaissez que setInc, alors ce n'est pas comme ça. Donc si vous n'avez rien à faire, il vaut mieux en savoir plus sur le code source et la documentation. Cela ne vous fera que du bien et pas du mal.

Une autre question concerne l'article de Kaka mentionnant l'utilisation d'une nouvelle méthode pour obtenir une incrémentation et une décrémentation simultanées de plusieurs champs. Cette méthode a été modifiée en bas du framework.

Cette méthode d'implémentation n'est pas recommandée. La modification du code source est uniquement destinée aux tests et à améliorer votre capacité à lire le code source, plutôt que d'effectuer des modifications sans crainte au bas du framework.

«

La persévérance dans l'apprentissage, la persévérance dans les blogs et la persévérance dans le partage sont les convictions que Kaka a toujours défendues depuis sa carrière. J'espère que les articles de Kaka sur l'immense Internet pourront le faire. je t'apporte un peu d'aide Silk. Je m'appelle Kaka, à la prochaine fois.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn