Heim  >  Artikel  >  PHP-Framework  >  ThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert

ThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert

咔咔
咔咔Original
2021-01-04 18:10:103308Durchsuche
"

In diesem Artikel geht es darum, wie man mehrere Felder gleichzeitig vergrößern und verkleinern kann

"

Vorwort

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.

1. ThinkPHP-Framework-Implementierung

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.phpMethode dieser Datei. thinkphp/library/think/db/Query.php这个文件的方法。

这一块的源码咔咔就不看了,后边在说吧!先解决当下问题,小Q很着急的。

大家在写自增的方法时会不会跟小Q一样一直都使用的是setInc

Ich werde mir den Quellcode dieses Stücks nicht ansehen, ich werde später darüber sprechen! Lösen wir zuerst das unmittelbare Problem, Xiao Q ist sehr besorgt. 🎜🎜Verwenden Sie beim Schreiben der automatischen Inkrementierungsmethode immer setInc, das dachte sich Xiao Q, als er diese Frage bekam. 🎜
ThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert
Vorläufiger Plan

Beim Besuch wird er gnadenlos auftauchen und Little Q einen schmerzhaften Schlag versetzen.

ThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert
Fehlermeldung

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.

ThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert
Die endgültige Lösung

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.

Zweitens: Blättern Sie durch den Quellcode

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 可以同时自增或者自减多个字段,但是值只能是固定的.

ThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert
Inc-Quellcode

Wenn Sie mehrere Felder und mehrere Schritte implementieren möchten, müssen Sie den Quellcode ändern, um dieses Problem zu lösen.

ThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert
Wenn Sie beispielsweise mehrere Felder entsprechend mehreren Schritten implementieren möchten

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.

ThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert
Ändern Sie den Quellcode

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.

3. Verwenden Sie SQL-Anweisungen zur Implementierung

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.

ThinkPHP zeigt, wie man mehrere Felder gleichzeitig erhöht und verringert
Native SQL-Implementierungslösung

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.

Zusammenfassung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn