"In diesem Artikel geht es darum, wie man mehrere Felder gleichzeitig vergrößern und verkleinern kann
"
Vor kurzem ging Xiao Q zu einem Vorstellungsgespräch und fragte dann nach Frage Die Frage ist, wie man mehrere Felder gleichzeitig inkrementieren und dekrementieren kann.
Der kleine Q konnte eine Zeit lang nicht antworten, also ging er am Ende nach Hause und wartete auf die Benachrichtigung …
Kaka wird dem kleinen Q eine einfache Antwort auf diese Frage geben.
Das Framework, mit dem Xiao Q am besten vertraut ist, ist ThinkPHP, daher wird Kaka zuerst ThinkPHP verwenden, um dieses Problem zu lösen.
Um dieses Problem zu lösen, müssen Sie zunächst ein gewisses Verständnis für inc und setInc des Frameworks haben. Im Framework werden diese beiden Funktionen zum Erhöhen oder Verringern verwendet.
Aber es gibt einen Unterschied zwischen den beiden. Inc ist eine Methode in der Db-Klasse, und setInc ruft die Methode tatsächlich im Modell auf, aber am Ende verwenden beide thinkphp/library/think/db/Query.php
Methode dieser Datei. thinkphp/library/think/db/Query.php
这个文件的方法。
这一块的源码咔咔就不看了,后边在说吧!先解决当下问题,小Q很着急的。
大家在写自增的方法时会不会跟小Q一样一直都使用的是setInc
setInc
, das dachte sich Xiao Q, als er diese Frage bekam. 🎜Beim Besuch wird er gnadenlos auftauchen und Little Q einen schmerzhaften Schlag versetzen.
Diese Methode ist also nicht machbar, aber was soll ich tun, wenn ich diese Funktion trotzdem implementieren möchte!
Keine Sorge, Kaka wird dich mitnehmen, um die Neue Welt zu besuchen.
Verwenden Sie direkt die beiden Inc-Methoden, um mehrere Felder automatisch zu erhöhen oder zu verringern. Die Idee von Kaka ist auch einfach, den Quellcode zu betrachten.
Oder vielleicht hat jeder bei der Verwendung des thinkphp-Frameworks zwei where-Methoden in einer Abfrage verwendet! Tatsächlich sind die Ideen dieselben, da beide Abfragen implementieren können.
Dann sollten diese beiden Incs auch in der Lage sein, mehrere Felder für die automatische Inkrementierung oder automatische Dekrementierung zu implementieren.
Kakas endgültige Lösung ist also die oben gezeigte Lösung.
Dabei durchlief Kaka immer noch den langweiligen Prozess der Inc-Implementierung.
Im Bild unten schauen wir uns hauptsächlich die Erklärung zu den Parametern an. Sie können sehen, dass der erste Parameter ein Array oder ein String sein kann.
Aber laut Code werden Sie feststellen, dass die Schrittgröße zwar einen Wert beträgt, obwohl das Erhöhen oder Verringern mehrerer Felder unterstützt wird.
Die vom Framework bereitgestellte Methode ist also 可以同时自增或者自减多个字段,但是值只能是固定的
.
Wenn Sie mehrere Felder und mehrere Schritte implementieren möchten, müssen Sie den Quellcode ändern, um dieses Problem zu lösen.
Das Folgende ist der Inhalt, nachdem Kaka den Quellcode geändert hat. Sie können ihn mit dem Bild des Inc-Quellcodes vergleichen.
Der von Kaka geänderte Quellcode ist hauptsächlich der eingekreiste Bereich, da der Wert von Schritt im Quellcode direkt als 1 definiert ist.
Sie müssen diesen Block also ändern und is_array verwenden, um zu erkennen, ob die Variable ein Array ist.
Nach den oben genannten Vorgängen können Sie für mehrere Felder und mehrere Schritte eine Selbstinkrementierung oder Selbstdekrementierung erreichen.
Kaka, den Quellcode direkt zu ändern, ist nicht für jedermann zum Lernen geeignet. Wir müssen nur lernen, im Quellcode eine Lösung für ein Problem zu finden.
Für das Problem, wie mehrere Felder gleichzeitig erhöht und verringert werden können, wird daher empfohlen, die Lösung von Option eins zu verwenden.
Schließlich ist diese Situation in der Minderheit. Wenn Sie die Grundlagen des Frameworks ändern, werden Sie durcheinander geraten.
Wenn Sie das Problem lösen möchten, müssen Sie den Inhalt dieses Abschnitts nicht lesen, um Ihr Problem perfekt zu lösen.
Kaka denkt gerne über ein Problem nach und verwendet mehrere Lösungen, um es zu lösen.
Dann wird Kaka SQL-Anweisungen verwenden, um dieses Problem eingehend zu analysieren.
Nachdem wir den Implementierungsplan im ersten Abschnitt implementiert haben, gibt es im Framework eine Methode fetchSql(), mit der die SQL-Anweisung direkt ausgedruckt werden kann.
Dann schauen wir uns an, wie diese SQL-Anweisung aussieht.
<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>
Das Obige ist die SQL-Anweisung, die mit der vom Framework bereitgestellten Methode ausgedruckt wurde. Der Tabellenname und das Feld wurden geändert. Sie können es direkt in das Feld ändern, das Sie vergrößern oder verkleinern müssen.
Die Verwendung dieser SQL-Anweisung kann das Thema dieses Artikels lösen, daher stellt Kaka keine Reihe von Screenshots der Druckergebnisse zur Verfügung. Wenn Sie interessiert sind, können Sie es selbst testen.
Wie das Sprichwort sagt: Wenn man nur redet und keine falschen Bewegungen übt, muss man trotzdem viel alleine üben.
Das Obige wird im Framework mithilfe von nativem SQL implementiert, um mehrere Felder und mehrere Schritte gleichzeitig zu erhöhen und zu dekrementieren.
Dieses Problem ist eigentlich sehr einfacher Natur. Das Framework stellt auch entsprechende Methoden bereit, die nur direkt aufgerufen werden müssen.
Das Problem besteht darin, dass Sie wissen, wie viele Selbstinkrementierungs- oder Selbstdekrementierungsmethoden das Framework bereitstellt: inc und setInc.
Wenn Sie nur setInc kennen, dann sind Sie nur ein Verlierer. Wenn Sie also nichts zu tun haben, sollten Sie mehr über den Quellcode und die Dokumentation lesen. Es wird Ihnen nur gut tun und nicht.
Eine weitere Frage betrifft Kakas Artikel, in dem die Verwendung einer neuen Methode zum gleichzeitigen Erhöhen und Verringern mehrerer Felder erwähnt wird. Diese Methode wurde am Ende des Frameworks geändert.
Diese Implementierungsmethode wird nicht empfohlen, den Quellcode nur zum Testen und zur Verbesserung Ihrer Fähigkeit, den Quellcode zu lesen, zu ändern, anstatt furchtlose Änderungen am unteren Rand des Frameworks vorzunehmen.
„Beharrlichkeit beim Lernen, Beharrlichkeit beim Bloggen und Beharrlichkeit beim Teilen sind die Überzeugungen, die Kaka seit seiner Karriere vertritt. Ich hoffe, dass Kakas Artikel im riesigen Internet Ihnen ein wenig helfen können Kaka, wir sehen uns in der nächsten Ausgabe.
“
Das obige ist der detaillierte Inhalt vonThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!