Heim > PHP-Framework > Denken Sie an PHP > So verwenden Sie die Abfragekorrelationsfunktion von ThinkPHP

So verwenden Sie die Abfragekorrelationsfunktion von ThinkPHP

WBOY
Freigeben: 2023-06-03 08:01:17
nach vorne
1707 Leute haben es durchsucht

1. Modellzuordnung

1.1 Eins-zu-eins-Zuordnung

Eins-zu-eins-Zuordnung bedeutet, dass es in jeder der beiden Datentabellen nur einen Datensatz gibt. Verwenden Sie in diesem Fall hasOne () und AlongTo()-Funktionen zum Durchführen der Zuordnung. Angenommen, wir haben zwei Datentabellen, eine heißt Benutzertabelle (Benutzertabelle) und die andere ist Benutzerinformationstabelle (Benutzerinfo-Tabelle). Ihre jeweiligen Strukturen sind wie folgt:

user:
id
name

userinfo:
id
user_id
age
Nach dem Login kopieren

Die beiden oben genannten Tabellen sind über das Feld user_id miteinander verbunden . Jetzt müssen wir die Benutzerinformationen und das entsprechende Alter in der Benutzertabelle abfragen. Die Schritte sind wie folgt:

Definieren Sie eine userinfo()-Methode im Benutzermodell mit einem beliebigen Methodennamen.

//User模型

<?php

class User extends Model{
public function userinfo(){
return $this -> hasOne(&#39;UserInfo&#39;, &#39;user_id&#39;);
}
}
Nach dem Login kopieren

Definieren Sie eine age()-Methode im Benutzermodell. Diese Methode definiert tatsächlich ein Attribut, das auf das Altersfeld des Benutzerinfo-Modells zugreift.

//User模型
<?php

class User extends Model{
protected $readonly = [&#39;age&#39;];

public function userinfo(){
return $this -> hasOne(&#39;UserInfo&#39;, &#39;user_id&#39;);
}

public function getAgeAttr($value, $data){
if(isset($data[&#39;userinfo&#39;])){
return $data[&#39;userinfo&#39;][&#39;age&#39;];
}
return &#39;&#39;;
}
}
Nach dem Login kopieren

Nach Abschluss des obigen Codes können wir die Methode find() verwenden, um den gewünschten Benutzer und sein Alter abzufragen:

//查询user表中id为1的用户

$user = User::get(1);
echo $user -> name;
echo $user -> age;
Nach dem Login kopieren

Hinweis: Im obigen Code verwenden wir das Attribut $readonly, und das Attribut $readonly ist ThinkPHP stellt Attribute bereit, die einige Attribute davor schützen können, in die Datenbank geschrieben zu werden. Im obigen Code legen wir das Altersattribut als schreibgeschütztes Attribut fest, sodass beim Zugriff auf $user -> age automatisch die Methode getAgeAttr aufgerufen wird, um das Altersfeld im Userinfo-Modell abzufragen.

1.2 Eins-zu-viele-Zuordnung

Eins-zu-viele-Zuordnung bedeutet, dass eine der beiden Datentabellen mehrere Datensätze und die andere nur einen Datensatz enthält. Wie im folgenden Beispiel:

order:
id
user_id
order_no

order_goods:
id
order_id
name
price
Nach dem Login kopieren

Die beiden Tabellen oben sind über das Feld order_id miteinander verbunden. Wir müssen nun die Bestellinformationen des Benutzers und die entsprechenden Produktinformationen in der Benutzertabelle finden. Die spezifischen Vorgänge sind wie folgt:

Definieren Sie eine „orders()“-Methode im Benutzermodell. Diese Methode zeigt an, dass ein Benutzer mehrere Bestellungen hat.

//User模型

<?php
class User extends Model{
public function orders(){
return $this -> hasMany(&#39;Order&#39;, &#39;user_id&#39;);
}
}
Nach dem Login kopieren

Definieren Sie eine waren()-Methode im Bestellmodell. Diese Methode gibt an, dass eine Bestellung mehrere Produkte enthält.

//Order模型
<?php
class Order extends Model{
public function goods(){
return $this -> hasMany(&#39;OrderGoods&#39;, &#39;order_id&#39;);
}
}
Nach dem Login kopieren

Nachdem wir die obige Zuordnung definiert haben, können wir die Methode find() verwenden, um die Bestellungen des Benutzers und die jeder Bestellung entsprechenden Produkte abzufragen:

//查询user表中id为1的用户的订单信息和订单的商品信息

$user = User::get(1, &#39;orders.goods&#39;);
var_dump($user -> orders[0] -> goods);
Nach dem Login kopieren

Der letzte Parameter ('orders.goods') bedeutet, alle seine Artikel abzufragen gleichzeitig auftrags- und auftragsbezogene Wareninformationen.

2. Abfrageassoziation

2.1 Assoziationsabfrage verwenden

Wir können eine Assoziationsabfrage implementieren, indem wir auf die in der Modellebene definierten Assoziationsattribute zugreifen, ohne die Assoziationsbeziehung auf der Modellebenenebene zu definieren. Beispielsweise möchten wir nun einen Benutzer und seine Bestellinformationen abfragen:

$user = User::get(1);
$orders = $user -> orders;
echo $user -> name;
foreach($orders as $order){
echo $order -> order_no . "\n";
}
Nach dem Login kopieren

2.2 Verzögerte Zuordnung

Wenn wir bei der Abfrage eines Modells nicht automatisch dessen Zuordnung abfragen möchten, können wir die verzögerte Zuordnung verwenden, um diese Anforderung zu erfüllen . Beispiel:

$user = User::with(&#39;orders&#39;)->get(1);
Nach dem Login kopieren

Im obigen Code haben wir beim Festlegen der Variablen $user die abzurufende Zuordnung in der Funktion with() definiert. Zu diesem Zeitpunkt fragt die Abfrageanweisung die Zuordnung standardmäßig nicht automatisch ab, sondern Ich werde darauf warten, dass wir den Verein nutzen.

2.3 Enthaltende Assoziationen

Zusätzlich zu der oben genannten verzögerten Assoziation können wir auch alle Assoziationen automatisch einschließen, indem wir den true-Parameter nach der with-Methode festlegen, um unsere Abfrageanforderungen zu erfüllen. Zum Beispiel:

$user = User::with(&#39;orders&#39;)->find(1, true);
Nach dem Login kopieren

Im obigen Code haben wir der find()-Methode einen wahren Parameter hinzugefügt. Dieser Parameter gibt an, dass wir alle Assoziationen des Benutzermodells einbeziehen möchten.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Abfragekorrelationsfunktion von ThinkPHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
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