ThinkPHP: Eines der drei leistungsstärksten Tools für Modelle (Sucher)

爱喝马黛茶的安东尼
Freigeben: 2019-12-16 16:51:50
nach vorne
3209 Leute haben es durchsucht

ThinkPHP: Eines der drei leistungsstärksten Tools für Modelle (Sucher)

[√Neue Fähigkeit] Sucher – einheitliche Verwaltung Ihres Suchcodes

Der Modellsucher ist ein automatischer Das dritte einheitliche Verwaltungstool nach den Modell-Getter- und Modifikatorfunktionen wird hauptsächlich zum Kapseln von Abfragebedingungsausdrücken von Feldern (oder Suchbezeichnern) verwendet. Ein Sucher entspricht einer speziellen Methode (die Methode muss vom öffentlichen Typ sein). searchFieldNameAttr (FieldName ist die Kamel-Groß-/Kleinschreibung des Datentabellenfelds). Der Sucher wird nur ausgelöst, wenn die withSearch-Methode aufgerufen wird.

Nutzungsszenarien des Suchers umfassen:

·Einschränken und Standardisieren der Suchbedingungen des Formulars;

·Vordefinierte Abfragebedingungen vereinfachen die Abfrage.

Wenn wir beispielsweise einen Sucher für das Namensfeld und das Zeitfeld für das Benutzermodell definieren müssen, können wir Folgendes verwenden:

<?php
namespace app\index\model;
use think\Model;
class User extends Model 
{
    public function searchNameAttr($query, $value, $data)
    {
        $query->where(&#39;name&#39;,&#39;like&#39;, $value . &#39;%&#39;);
    }
    
    public function searchCreateTimeAttr($query, $value, $data)
    {
        $query->whereBetweenTime(&#39;create_time&#39;, $value[0], $value[1]);
    }    
}
Nach dem Login kopieren

Die Suchmethode hat drei Parameter, der erste ist der Abfrageobjekt und das zweite. Das erste ist der Wert der aktuellen Suchkennung und das dritte sind alle aktuellen Suchdaten (optional).

Dann können wir die folgende Abfrage verwenden:

User::withSearch([&#39;name&#39;, &#39;create_time&#39;], [
&#39;name&#39;=>&#39;think&#39;,
    &#39;create_time&#39;=>[&#39;2018-8-1&#39;,&#39;2018-8-5&#39;],
        &#39;status&#39;=>1
    ])
->select();
Nach dem Login kopieren

Die endgültig generierte SQL-Anweisung ähnelt

SELECT * FROM `think_user` WHERE  `name` LIKE &#39;think%&#39; AND `create_time` BETWEEN &#39;2018-08-01 00:00:00&#39; AND 
&#39;2018-08-05 00:00:00&#39;
Nach dem Login kopieren

Sie können sehen, dass im Statusfeld keine Daten vorhanden sind Abfragebedingungen, sodass illegale Abfragebedingungen des übergebenen Formulars sehr gut vermieden werden können. In diesem Beispiel können nur die Bedingungen name und create_time für die Abfrage verwendet werden.

Tatsächlich können Sie zusätzlich zur Verwendung von Abfrageausdrücken im Sucher auch jeden anderen Abfragekonstruktor und Kettenoperationen verwenden.

Wenn Sie beispielsweise die Suchergebnisse nach dem im Formular definierten Sortierfeld sortieren müssen, können Sie

<?php
namespace app\index\model;
use think\Model;
class User extends Model 
{
    public function searchNameAttr($query, $value, $data)
    {
        $query->where(&#39;name&#39;,&#39;like&#39;, $value . &#39;%&#39;);
        if (isset($data[&#39;sort&#39;])) {
        $query->order($data[&#39;sort&#39;]);
        }        
    }
    
    public function searchCreateTimeAttr($query, $value, $data)
    {
        $query->whereBetweenTime(&#39;create_time&#39;, $value[0], $value[1]);
    }      
}
Nach dem Login kopieren

verwenden. Dann können wir die folgende Abfrage verwenden:

User::withSearch([&#39;name&#39;,&#39;create_time&#39;, &#39;status&#39;], [
&#39;name&#39;=>&#39;think&#39;,
    &#39;create_time&#39;=>[&#39;2018-8-1&#39;,&#39;2018-8-5&#39;],
        &#39;status&#39;=>1,
        &#39;sort&#39;=>[&#39;status&#39;=>&#39;desc&#39;],
    ])
->select();
Nach dem Login kopieren

Die SQL der endgültigen Abfrage kann

SELECT * FROM `think_user` WHERE  `name` LIKE &#39;think%&#39; AND `create_time` BETWEEN &#39;2018-08-01 00:00:00&#39; AND 
&#39;2018-08-05 00:00:00&#39; ORDER BY `status` DESC
Nach dem Login kopieren

sein. Sie können auch einen Feldalias für den Sucher definieren, zum Beispiel:

User::withSearch([&#39;name&#39; => &#39;nickname&#39;,&#39;create_time&#39;, &#39;status&#39;], [
&#39;nickname&#39;=>&#39;think&#39;,
    &#39;create_time&#39;=>[&#39;2018-8-1&#39;,&#39;2018-8-5&#39;],
        &#39;status&#39;=>1,
        &#39;sort&#39;=>[&#39;status&#39;=>&#39;desc&#39;],
    ])
->select();
Nach dem Login kopieren

Die durchsuchten Daten verwenden die Feldkennung des Spitznamens, aber wir haben es trotzdem Verwenden Sie den durch das Namensfeld identifizierten Sucher (d. h. die Methode searchNameAttr).

Der Sucher wird normalerweise mit dem Abfragebereich verglichen, er muss nur einmal aufgerufen werden. Wenn der Abfragebereich kombiniert werden muss, muss er mehrmals aufgerufen werden.

Wenn Sie die Db-Abfragemethode verwenden, können Sie weiterhin die Suchfunktion verwenden, aber die Definition der Suchmethode muss wie folgt in eine Abschlussmethode geändert werden:

User::withSearch([&#39;name&#39; => function($query,$value,$data){
    $query->where(&#39;name&#39;,&#39;like&#39;, $value . &#39;%&#39;);
}, &#39;create_time&#39;=>function($query,$value,$data){
    $query->whereBetweenTime(&#39;create_time&#39;, $value[0], $value[1]);
}], [
&#39;name&#39;=>&#39;think&#39;,
    &#39;create_time&#39;=>[&#39;2018-8-1&#39;,&#39;2018-8-5&#39;],
        &#39;status&#39;=>1
    ])
->select();
Nach dem Login kopieren

PHP Chinesische Website Es gibt viele kostenlose ThinkPHP-Einführungs-Tutorials, jeder ist herzlich willkommen, es zu lernen!

Dieser Artikel wurde reproduziert von: https://blog.thinkphp.cn/783775

Das obige ist der detaillierte Inhalt vonThinkPHP: Eines der drei leistungsstärksten Tools für Modelle (Sucher). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:thinkphp.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage