Heim  >  Artikel  >  php教程  >  ThinkPHP3.1 Quick Start (3) Abfragesprache.

ThinkPHP3.1 Quick Start (3) Abfragesprache.

黄舟
黄舟Original
2016-12-20 11:34:281255Durchsuche

Im vorherigen Artikel haben wir die grundlegende Daten-CURD-Methode beherrscht, aber in mehr Fällen sind CURD-Operationen aufgrund von Unterschieden in der Geschäftslogik oft nicht so einfach, insbesondere bei komplexer Geschäftslogik, was auch ein Manko von ActiveRecord ist Modus. Die Abfragesprache von ThinkPHP kann in Kombination mit kohärenten Operationen komplexe Anforderungen an die Geschäftslogik gut lösen. In diesem Artikel werden wir uns zunächst eingehend mit der Abfragesprache des Frameworks befassen.

Einführung

ThinkPHP verfügt über integrierte, sehr flexible Abfragemethoden, mit denen Datenabfragevorgänge schnell ausgeführt werden können. Abfragebedingungen können für Vorgänge wie Lesen, Aktualisieren und Löschen verwendet werden, die hauptsächlich das Wo betreffen Methode usw. Unabhängig davon, welche Datenbank Sie verwenden, verwenden Sie fast dieselbe Abfragemethode (einige Datenbanken wie Mongo haben unterschiedliche Ausdrucksabfragen. Das System hilft Ihnen, die Unterschiede zwischen verschiedenen Datenbanken zu lösen.) Framework Diese Abfragemethode wird als Abfragesprache bezeichnet. Die Abfragesprache ist auch das ORM-Highlight des ThinkPHP-Frameworks und macht Abfragevorgänge einfacher und verständlicher. Lassen Sie uns nacheinander die Konnotation der Abfragesprache erklären.

Abfragemethode

ThinkPHP kann die direkte Verwendung von Zeichenfolgen als Abfragebedingungen unterstützen, in den meisten Fällen wird jedoch empfohlen, Indexarrays oder Objekte als Abfragebedingungen zu verwenden, da dies sicherer ist. 1. Verwenden Sie Zeichenfolgen als Abfragebedingungen. Dies ist die traditionellste Methode, die jedoch nicht sehr sicher ist. Beispiel:

$User = M("User"); 🎜 >$User->where('type=1 AND status=1')->select();

Die endgültig generierte SQL-Anweisung ist

SELECT * FROM think_user WHERE type = 1 AND status=1

Bei Verwendung einer Zeichenfolgenabfrage können wir den von der neuen Version bereitgestellten Sicherheitsvorverarbeitungsmechanismus für Zeichenfolgenbedingungen verwenden, der vorerst nicht im Detail erläutert wird. 2. Die Verwendung von Arrays als Abfragebedingungen ist die am häufigsten verwendete Abfragemethode, zum Beispiel:

$User = M("User" // Instanziieren Sie das Benutzerobjekt

$condition[ '); name'] = 'thinkphp';

$condition['status'] = 1;

// Übergeben Sie die Abfragebedingungen an die Abfragemethode

$User-> ;where($condition)->select();

Die endgültige generierte SQL-Anweisung ist

SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1

Wenn Sie eine Abfrage mit mehreren Feldern durchführen, ist die standardmäßige logische Beziehung zwischen Feldern ein logisches UND. Sie können die standardmäßige logische Beurteilung jedoch mithilfe der folgenden Regeln ändern, indem Sie _logic verwenden, um die Abfragelogik zu definieren:

$User = M("User"); // Benutzerobjekt instanziieren

$condition['name'] = 'thinkphp';

$condition['account'] = 'thinkphp' ;

$condition['_logic'] = 'OR';

// Übergeben Sie die Abfragebedingungen an die Abfragemethode

$User->where($condition )- >select();

Die endgültige generierte SQL-Anweisung ist

SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp'

3. Verwenden Sie die Objektmethode zum Abfragen. Nehmen Sie hier das integrierte stdClass-Objekt als Beispiel:

$User = M("User"); // Instanziieren Sie das Benutzerobjekt

// Abfragebedingungen definieren

$condition = new stdClass();

$condition->name = 'thinkphp'; 1;

$User->where($condition)->select();

Die endgültige generierte SQL-Anweisung ist die gleiche wie oben

SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1

Die Wirkung der Verwendung von Objektmodus-Abfragen und der Verwendung von Array-Abfragen ist gleich und austauschbar. In den meisten Fällen empfehlen wir die Verwendung des Array-Modus, um effizienter zu sein .

Ausdrucksabfrage

Die obige Abfragebedingung ist nur eine einfache Gleichheitsbeurteilung. Abfrageausdrücke können verwendet werden, um mehr SQL-Abfragesyntax zu unterstützen, die auch die ThinkPHP-Abfragesprache ist Das Wesentliche des Abfrageausdrucks ist das Verwendungsformat: $map['Feldname'] = array('Ausdruck','Abfragebedingung'); Die unterstützten Abfrageausdrücke lauten wie folgt. Die Bedeutung ist:

Ausdruck

Bedeutung

EQ Gleich (=)

NEQ Nicht gleich (<>)

GT größer als (>)

EGT größer oder gleich (>=)

LT kleiner als (< )

ELT Kleiner oder gleich (<=)

LIKE Fuzzy-Abfrage

[NOT] BETWEEN (nicht) Intervallabfrage

[NOT] IN (nicht ) IN-Abfrage

EXP Ausdrucksabfrage, unterstützt SQL-Syntax

Beispiele sind wie folgt: EQ: gleich (=)
Zum Beispiel:

$map[' id'] = array( 'eq',100);

entspricht der folgenden Abfrage

$map['id'] = 100; Die durch

ist id = 100NEQ: Ungleich (<>)

Zum Beispiel:

$map['id'] = array('neq',100);

Die Abfrage Bedingung dargestellt durch

ist id < 100GT: größer als (>)


$map['id'] = array('gt',100); Die durch

dargestellte Abfragebedingung ist id > ; 100EGT: größer oder gleich (>=)

Zum Beispiel:


$map['id'] = array('egt ',100); Die durch

dargestellte Abfragebedingung ist id >= 100LT: kleiner als (<)

Zum Beispiel:


$map['id'] = array ('lt',100); Die durch

dargestellte Abfragebedingung ist id <100ELT: Kleiner als oder gleich (<=)

Zum Beispiel:


$map[ 'id'] = array('elt',100);

repräsentiert die Abfragebedingungs-ID <= 100[NOT] LIKE: Gleich wie SQL LIKE

Zum Beispiel:


$map['name'] = array('like','thinkphp%');

Die Abfragebedingung wird zu einem Namen wie „thinkphp%“

Wenn der Parameter DB_LIKE_FIELDS konfiguriert ist, werden einige Felder automatisch angezeigt Führen Sie eine Fuzzy-Abfrage durch. Wenn Sie beispielsweise Folgendes festlegen:


'DB_LIKE_FIELDS'=>'title|content'

, verwenden Sie

$map['title'] = 'thinkphp';

Die Abfragebedingung erhält einen Titel wie „%thinkphp%“

Unterstützt beispielsweise den Array-Modus


$map['a'] =array('like',array(' %thinkphp %','%tp'),'OR');

$map['b'] =array('notlike',array('%thinkphp%','%tp'), 'AND ');

Die generierten Abfragebedingungen sind:

(a wie '%thinkphp%' ODER a wie '%tp') UND (b nicht wie '%thinkphp%' UND b nicht wie '%tp')

[NOT] BETWEEN: Wie SQLs [not] between unterstützen Abfragebedingungen Zeichenfolgen oder Arrays, zum Beispiel:

$map['id'] = array('between','1,8');

ist äquivalent zu Folgendem:

$map['id'] = array('between',array('1 ', '8'));

Die Abfragebedingung wird zur ID ZWISCHEN 1 UND 8[NOT] IN: Wie SQLs [not] in unterstützt die Abfragebedingung Zeichenfolgen oder Arrays, zum Beispiel:

$map['id'] = array('not in','1,5,8');

entspricht dem Folgenden:

$map['id '] =array('not in',array('1','5','8'));

Die Abfragebedingung wird zu id NOT IN (1,5, 8)EXP: Ausdruck, Unterstützen Sie komplexere Abfragesituationen

Zum Beispiel:


$map['id'] = array('in','1,3,8');

kann geändert werden in :

$map['id'] = array('exp',' IN (1,3,8) ');

Die exp-Abfragebedingungen werden nicht als Zeichenfolgen behandelt, Daher können die nachfolgenden Abfragebedingungen jede von SQL unterstützte Syntax verwenden, einschließlich der Verwendung von Funktionen und Feldnamen. Abfrageausdrücke können nicht nur für Abfragebedingungen, sondern auch für Datenaktualisierungen verwendet werden, zum Beispiel:

$User = M("User"); // Benutzerobjekt instanziieren

// To Datenobjektattributzuweisung ändern

$data['name'] = 'ThinkPHP';

$data['score'] = array('exp','score+1'); // 1 zu den Punkten des Benutzers hinzufügen

$User->where('id=5')->save($data); // Die geänderten Daten gemäß den Bedingungen speichern

Schnellabfrage

Ab Version 3.0 wurde eine Schnellabfragemethode hinzugefügt, die das Schreiben von Abfragebedingungen weiter vereinfachen kann, zum Beispiel: 1. Implementieren Sie dieselben Abfragebedingungen für verschiedene Felder

$ User = M("User"); // Instanziieren Sie das Benutzerobjekt

$map['name|title'] = 'thinkphp';

/ / Übergeben Sie die Abfragebedingungen an die Abfragemethode

$User->where($map)->select();

Die Abfragebedingung wird zu

name= 'thinkphp' OR title = 'thinkphp '

2. Implementieren Sie verschiedene Abfragebedingungen für verschiedene Felder

$User = M("User"); // Instanziieren Sie das Benutzerobjekt

$map['status&title' ] =array('1','thinkphp','_multi'=>true);

// Übergeben Sie die Abfragebedingungen an die Abfragemethode

$User->where($ map)->select();

'_multi'=>true muss am Ende des Arrays hinzugefügt werden, um anzuzeigen, dass es derzeit mehrere Bedingungen erfüllt, sodass die Abfragebedingung zu

status= 1 AND title = 'thinkphp'

, Abfragefelder unterstützen mehr, zum Beispiel:

$map['status&score&title'] =array('1',array('gt','0'),'thinkphp',' _multi'= >true);

Die Abfragebedingung wird zu

status= 1 UND Punktzahl >0 UND Titel = 'thinkphp'

Hinweis: In der Verknüpfungsabfrage -Methode können „|“ und „&“ nicht gleichzeitig verwendet werden.

Intervallabfrage

ThinkPHP unterstützt Intervallabfragen für ein bestimmtes Feld, zum Beispiel:

$map['id'] = array(array( 'gt',1),array('lt',10)) ;

Die erhaltene Abfragebedingung lautet:

(`id` > 1) AND (`id` < 10)

$map['id'] = array(array('gt',3),array('lt',10), 'or') ;

Die erhaltene Abfrage Die Bedingung ist: (`id` > 3) OR (`id` < 10)

$map['id'] = array(array('neq',6),array('gt ' ,3),'and');

Die erhaltene Abfragebedingung ist: (`id` != 6) AND (`id` > 3)

Die letzte Bedingung kann AND, OR sein oder XOR-Operator, wenn nicht geschrieben, wird standardmäßig die UND-Verknüpfung verwendet.
Die Bedingungen der Intervallabfrage können alle Ausdrücke gewöhnlicher Abfragen unterstützen, was bedeutet, dass Ausdrücke wie LIKE, GT und EXP unterstützt werden können. Darüber hinaus kann die Intervallabfrage auch weitere Bedingungen unterstützen, sofern die Bedingungen für ein Feld zusammengeschrieben werden können, zum Beispiel:

$map['name'] = array(array('like',' % a%'), array('like','%b%'), array('like','%c%'), 'ThinkPHP','or');

Letzte Abfragebedingung Ist:

(`name` LIKE '%a%') OR (`name` LIKE '%b%') OR (`name` LIKE '%c%') OR (`name` = ' ThinkPHP')

Kombinierte Abfrage

Der Hauptteil der kombinierten Abfrage verwendet immer noch eine Array-Abfrage, es wurde jedoch einige spezielle Abfrageunterstützung hinzugefügt, einschließlich einer Zeichenfolgenmodusabfrage (_string). , zusammengesetzte Abfrage (_complex), Anforderungszeichenfolgenabfrage (_query) und nur eine spezielle Abfrage in einer gemischten Abfrage können für jede Abfrage definiert werden. Aufgrund der Array-Indizierungsmethode werden spezielle Abfragen mit demselben Index überschrieben. 1. Abfrage im String-Modus (mit _string als Abfragebedingung)

Array-Bedingungen können auch mit String-Bedingungen gemischt werden, zum Beispiel:

$User = M("User"); // Instanziierung Benutzerobjekt

$map['id'] = array('neq',1);

$map['name'] = 'ok';

$ map[' _string'] = 'status=1 AND score>10';

$User->where($map)->select(

Die letzte Abfrage Die Bedingungen werden:

( `id` != 1 ) AND ( `name` = 'ok' ) AND ( status=1 AND score>10 )

2. Anforderungszeichenfolge Abfragemethode Anforderungszeichenfolge-Abfrage ist Eine Methode ähnlich der Übergabe von URL-Parametern, die eine einfache Beurteilung der Gleichheit von Bedingungen unterstützen kann.

$map['id'] = array('gt','100');

$map['_query'] = 'status=1&score=100&_logic=or';

Die erhaltene Abfragebedingung ist:

`id`>100 AND (`status` = '1' OR `score` = '100')

3 Eine zusammengesetzte Abfrage entspricht der Kapselung einer neuen Abfragebedingung und deren anschließender Einbindung in die ursprüngliche Abfragebedingung, sodass die Zusammenstellung komplexerer Abfragebedingungen abgeschlossen werden kann.

Zum Beispiel:

$where['name'] = array('like', '%thinkphp%');

$where['title'] = array(' like ','%thinkphp%');

$where['_logic'] = 'or';

$map['_complex'] = $where;

$map['id'] = array('gt',1);

Die Abfragebedingung ist

( id > 1) AND ( ( name like '%thinkphp%' ) ODER (Titel wie '%thinkphp%'))

Zusammengesetzte Abfrage verwendet _complex als Unterabfragebedingung, um sie zu definieren. Mit der vorherigen Abfragemethode können komplexere Abfragebedingungen sehr flexibel formuliert werden.

Viele Abfragemethoden können ineinander konvertiert werden. Beispielsweise können die oben genannten Abfragebedingungen wie folgt geändert werden:

$where['id'] = array('gt',1);

$where ['_string'] = ' (Name wie „%thinkphp%“) OR (Titel wie „%thinkphp“) ';

Die endgültig generierte SQL-Anweisung ist konsistent.

Statistische Abfrage

In Anwendungen verwenden wir häufig einige statistische Daten, wie z. B. die aktuelle Anzahl der Benutzer (oder diejenigen, die bestimmte Bedingungen erfüllen), die maximale Punktzahl aller Benutzer, die durchschnittliche Punktzahl der Benutzer usw. ThinkPHP bietet hierfür eine Methode Statistische Operationen. Eine Reihe integrierter Methoden, darunter:

Methode

Beschreibung

Anzahl zählt die Menge, die Parameter ist der Name des zu zählenden Feldes (Optional)

Max Holen Sie sich den Maximalwert, der Parameter ist der zu zählende Feldname (erforderlich)

Min Holen Sie sich den Minimalwert Parameter ist der zu zählende Feldname (erforderlich)

Avg Ruft den Durchschnittswert ab, der Parameter ist der zu zählende Feldname (erforderlich)

Sum Ruft die Gesamtpunktzahl ab, der Parameter ist der zu zählende Feldname (erforderlich)

Verwendungsbeispiel:

$User = M("User"); // Instanziieren Sie das Benutzerobjekt

Holen Sie sich die Anzahl von Benutzer:

$userCount = $User->count();

Oder basierend auf Feldstatistiken:

$userCount = $User->count("id ");

Erhalten Sie die maximale Punktzahl des Benutzers:

$maxScore = $User->max('score');

Erhalten Sie die Mindestpunktzahl der Benutzer, deren Bewertungen sind größer als 0:

$minScore = $User->where('score>0') ->min('score');

Ermitteln Sie die durchschnittliche Punktzahl des Benutzers:

$avgScore = $User->avg('score');

Statistics Die Gesamtpunktzahl des Benutzers:

$sumScore = $User->sum('score ');

Und alle statistischen Abfragen unterstützen die Verwendung kohärenter Operationen.

SQL-Abfrage

Der integrierte ORM- und ActiveRecord-Modus von ThinkPHP ermöglicht bequeme Datenzugriffsvorgänge, und die in der neuen Version hinzugefügte kohärente Betriebsfunktion macht diesen Datenvorgang komfortabler Klar, aber ThinkPHP behält weiterhin die Unterstützung für native SQL-Abfragen und Ausführungsvorgänge bei. Um den Anforderungen komplexer Abfragen und einiger spezieller Datenoperationen gerecht zu werden, ist der Rückgabewert der SQL-Abfrage das Abfrageergebnis der Db-Klasse, das direkt ohne Verarbeitung zurückgegeben wird. . Es umfasst hauptsächlich die folgenden zwei Methoden:

1. Abfragemethode

Abfrage führt SQL-Abfrageoperationen aus

Verwendungsabfrage( $ sql,$parse=false)

Parameter sql (erforderlich): die abzufragende SQL-Anweisung
parse (optional): ob die SQL analysiert werden muss

Rückgabewert

Wenn die Daten illegal sind oder die Abfrage falsch ist, geben Sie „false“ zurück

Andernfalls geben Sie den Datensatz mit den Abfrageergebnissen zurück (wie bei der Auswahlmethode)

Verwendungsbeispiel:

$Model = new Model() // Ein Modellobjekt instanziieren, das keiner Datentabelle entspricht

$Model->query( "select * from think_user where status=1");

Wenn Sie derzeit eine verteilte Datenbank verwenden und die Lese-/Schreibtrennung einrichten, wird die Abfragemethode immer auf dem Leseserver ausgeführt, sodass die Abfragemethode entspricht Lesevorgänge, unabhängig davon, was Ihre SQL-Anweisung ist. 2. Methode ausführen

execute wird zum Aktualisieren und Schreiben von SQL-Operationen von Daten verwendet

Verwendungexecute($sql,$parse=false)

Parameter sql (erforderlich): Auszuführende SQL-Anweisung
parse (optional): ob SQL analysiert werden muss

Rückgabewert Gibt „false“ zurück, wenn die Daten oder die Abfrage illegal sind falsch
Andernfalls wird die Anzahl der betroffenen Datensätze zurückgegeben

Verwendungsbeispiel:

$Model = new Model() // Ein Modellobjekt instanziieren, das keiner Datentabelle entspricht

$Model-> ;execute("update think_user set name='thinkPHP' where status=1");

Wenn Sie derzeit eine verteilte Datenbank verwenden und die Lese-/Schreibtrennung einrichten, wird die Ausführung ausgeführt Die Methode „execute“ wird immer auf dem schreibenden Server ausgeführt, sodass die Methode „execute“ Schreibvorgängen entspricht, unabhängig davon, was Ihre SQL-Anweisung ist.

Dynamische Abfrage

Mit Hilfe der Funktionen der PHP5-Sprache implementiert ThinkPHP dynamische Abfragemethoden. Die dynamischen Abfragemethoden des Kernmodells umfassen Folgendes:

Methodenname

Beschreibung

Beispiel

getBy Abfrage von Daten basierend auf dem Wert des Felds. Beispiel: getByName, getByEmail

getFieldBy Abfrage und Abfrage basierend auf dem Feld Geben Sie den Wert eines bestimmten Felds zurück. Zum Beispiel getFieldByName

1. getBy dynamische Abfrage Diese Abfragemethode fragt die Felder der Datentabelle ab. Beispielsweise verfügt das Benutzerobjekt über Attribute wie ID, Name, E-Mail, Adresse usw. Anschließend können wir die folgende Abfragemethode verwenden, um Datensätze direkt abzufragen, die die Bedingungen basierend auf einem bestimmten Attribut erfüllen.

$user = $User->getByName('liu21st');

$user = $User->getByEmail('liu21st@gmail.com');

$user = $User->getByAddress('Shenzhen, China');

Die dynamische Abfragemethode für mehrere Datenfelder wird derzeit nicht unterstützt. Bitte verwenden Sie dazu die Suchmethode und die Auswahlmethode Abfrage. 2. Die dynamische Abfrage getFieldBy fragt ein bestimmtes Feld ab und gibt den Wert eines bestimmten Felds zurück, z. B.

$userId = $User->getFieldByName('liu21st','id');

bedeutet, den ID-Wert des Benutzers basierend auf dem Namen des Benutzers abzurufen.

Unterabfrage

Ab Version 3.0 wurde Unterabfrageunterstützung hinzugefügt. Es gibt zwei Möglichkeiten, sie zu verwenden: 1. Verwenden Sie die Select-Methode, wenn der Parameter der Select Wenn die Methode falsch ist, bedeutet dies, dass keine Abfrage ausgeführt wird und nur die konstruierte SQL zurückgegeben wird, zum Beispiel:

// Erstellen Sie zuerst die Unterabfrage SQL

$subQuery = $model-> ;field('id,name')-> ;table('tablename')->group('field')->where($where)->order('status')->select(false );

Wenn die select-Methode den Parameter false übergibt, bedeutet dies, dass die aktuelle Abfrage nicht ausgeführt wird, sondern nur die Abfrage-SQL generiert wird. 2. Verwenden Sie die buildSql-Methode

$subQuery = $model->field('id,name')->table('tablename')->group('field')->where ( $where)->order('status')->buildSql();

Nach dem Aufruf der buildSql-Methode wird nicht der eigentliche Abfragevorgang ausgeführt, sondern nur die SQL-Anweisung der Abfrage generiert werden (um Verwirrung zu vermeiden, werden auf beiden Seiten des SQL Klammern hinzugefügt), und dann rufen wir es in nachfolgenden Abfragen direkt auf.

// Abfrage mit Unterabfragen

$model->table($subQuery.' a')->where()->order()->select( ) Die Die von

erstellte Unterabfrage-SQL kann in den kohärenten Operationsmethoden von ThinkPHP verwendet werden, z. B. in der Tabellen-Where usw.

Zusammenfassung

Dieser Artikel hilft uns hauptsächlich zu verstehen, wie Daten abgefragt werden, einschließlich einfacher Abfragen, Ausdrucksabfragen, Schnellabfragen, Intervallabfragen, statistischen Abfragen und der Durchführung Unterabfrageoperationen. Später werden wir mehr darüber erfahren, wie man kohärente Operationen verwendet, um komplexere CURD-Operationen durchzuführen.

Das Obige ist der Inhalt der ThinkPHP3.1 Quick Start (3) Query Language. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)


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