Heim >PHP-Framework >Denken Sie an PHP >ThinkPHP: Eines der drei leistungsstärksten Tools für Modelle (Sucher)

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

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼nach vorne
2019-12-16 16:51:503252Durchsuche

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]);
    }    
}

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();

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;

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]);
    }      
}

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();

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

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();

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();

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:thinkphp.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen