#「この記事では、複数のフィールドを同時に増減する方法について説明します。」
リトル Q はしばらく答えることができず、最終的には家に帰って通知を待つことになりました。....
カカはシャオ Q にこの質問に対する簡単な答えを与えます。
thinkphp/library/think/db/クエリはこのファイルの .php
メソッドを使用します。 この作品のソース コードは読みません。後で説明します。まずは当面の問題を解決しましょう。シャオQはとても不安です。
setInc
を使用しますか? Xiao Q がこの質問を受けたとき、これが考えたことです。訪問すると容赦なく現れてリトルQに手痛い一撃を与えます。
つまり、この方法は実行可能ではありませんが、それでもこの機能を実装したい場合はどうすればよいでしょうか。
心配しないでください。カカがあなたを新世界へ連れて行ってくれます。
2 つの inc メソッドを直接使用して複数のフィールドをインクリメントまたはデクリメントするため、KaKa のアイデアも単純にソース コードに基づいています。
あるいは、thinkphp フレームワークを使用するときに、誰もが 1 つのクエリで 2 つの where メソッドを使用したことがあるかもしれません。実際、どちらの where もクエリを実装できるため、考え方は同じです。 そうすれば、これら 2 つの inc は、自動インクリメントまたは自動デクリメント用の複数のフィールドも実装できるはずです。 つまり、Kaka の最終的な解決策は、上に示した解決策です。 です。これは複数のフィールドを同時に増減できますが、値は しか固定できません。
複数のフィールドと複数のステップを実装する場合は、この問題を解決するためにソース コードを変更する必要があります。
ソース コードを変更した後の Kaka の内容は次のとおりです。 inc のソースコードの画像と比較してください。
Kaka が修正したソースコードは主に丸で囲んだ部分になります。これは、ソースコード内で step の値が 1 として直接定義されているためです。
したがって、このブロックを変更し、is_array を使用して変数が配列かどうかを検出する必要があります。
上記の操作を行うと、複数のフィールドおよび複数のステップに対して自己インクリメントまたは自己デクリメントを実現できます。
Kaka を使用してソース コードを直接変更することは誰にも推奨されません。問題に対してソース コード内で解決策を見つける方法を学ぶ必要があるだけです。
したがって、複数のフィールドを同時にインクリメントおよびデクリメントする方法の問題については、解決策 1 を使用することをお勧めします。
結局のところ、この状況は少数派であり、枠組みの根本を変えるとめちゃくちゃになります。
それでは、この 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>
上記は、フレームワークが提供するメソッドを使用して出力された SQL ステートメントです。テーブル名とフィールド Kaka が変更されています。増加または減少する必要があるフィールドに直接変更できます。
この SQL ステートメントを使用すると、この記事のトピックを解決できるため、Kaka は印刷結果の一連のスクリーンショットを提供しませんでした。 . 興味があれば、自分で試してみることもできます。
よく言われるように、ただ話して、誤ったトリックを練習しないでください。
上記は、ネイティブ SQL を使用してフレームワークに実装され、複数のフィールドと複数のステップを同時に増減します。
この問題は、本質的には非常に単純です。フレームワークには、対応するメソッドも用意されています。必要なのは、直接電話するだけです。
問題は、フレームワークによって提供される自己インクリメント メソッドまたは自己デクリメント メソッドがいくつあるかを知っていることです。フレームワークには、inc と setInc の 2 つのメソッドが提供されます。
setInc しか知らないとしたら、それは間違いではないでしょうか? 何もすることがない場合は、ソース コードとドキュメントについて詳しく読む必要があります。
もう 1 つの質問は、複数のフィールドの同時インクリメントとデクリメントを実現するための新しいメソッドの使用について言及している Kaka の記事に関するものですが、このメソッドはフレームワークの下部で変更されています。
この実装方法は推奨されません。ソース コードの変更は、フレームワークの下部に大胆な変更を加えるのではなく、テストとソース コードを読む能力を向上させるためだけに行われます。
「学習の継続、ブログの継続、共有の継続は、カカがそのキャリア以来常に支持してきた信念です。巨大なインターネット上のカカの記事がそうであることを願っています」 Silk のお手伝いをします。私の名前はカカです。また次回お会いしましょう。
”
以上がThinkPHP で複数のフィールドを同時にインクリメントおよびデクリメントする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。