Mit der kontinuierlichen Weiterentwicklung der Webentwicklung ist die Abfragekorrelation zu einer sehr häufigen Anforderung geworden. Viele Frameworks bieten auch praktische Abfragekorrelationsschnittstellen. ThinkPHP ist ein äußerst beliebtes PHP-Framework. Es bietet leistungsstarke Abfragekorrelationsfunktionen und kann die verschiedenen Anforderungen von Entwicklern erfüllen. In diesem Artikel wird die Abfragekorrelationsfunktion von ThinkPHP ausführlich erläutert.
1. Modellzuordnung
1.1 Eins-zu-eins-Zuordnung
Eins-zu-eins-Zuordnung bedeutet, dass es in jeder der beiden Datentabellen nur einen Datensatz gibt. ) Funktionen zur Durchführung der Assoziation. Angenommen, wir haben zwei Tabellen, eine ist die Benutzertabelle und die andere ist die Benutzerinfo-Tabelle. Die Struktur der beiden Tabellen ist wie folgt:
user: id name userinfo: id user_id age
Die beiden oben genannten Tabellen sind über das Feld user_id miteinander verbunden. Wir möchten nun die Benutzerinformationen in der Benutzertabelle und das Alter des Benutzers ermitteln. Die spezifischen Vorgänge 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('UserInfo', 'user_id'); } }
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 = ['age']; public function userinfo(){ return $this -> hasOne('UserInfo', 'user_id'); } public function getAgeAttr($value, $data){ if(isset($data['userinfo'])){ return $data['userinfo']['age']; } return ''; } }
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;
Hinweis: Im obigen Code verwenden wir das Attribut $readonly, und das Attribut $readonly ist ThinkPHP Die bereitgestellten Attribute können einige Attribute davor schützen, 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
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('Order', 'user_id'); } }
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('OrderGoods', 'order_id'); } }
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, 'orders.goods'); var_dump($user -> orders[0] -> goods);
Der letzte Parameter ('orders.goods') bedeutet, alle seine Artikel abzufragen gleichzeitig auftrags- und auftragsbezogene Wareninformationen.
2. Abfrageassoziation
2.1 Assoziationsabfrage verwenden
Zusätzlich zur Definition von Assoziationsbeziehungen auf Modellebene können wir Assoziationsabfragen auch implementieren, indem wir die Assoziationseigenschaften der Modellebene aufrufen. 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"; }
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('orders')->get(1);
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 Einschließen von Assoziationen
Zusätzlich zu der oben genannten verzögerten Assoziation können wir auch alle Assoziationen automatisch einschließen, indem wir den Parameter true nach der with-Methode festlegen, um unsere Abfrageanforderungen zu erfüllen. Zum Beispiel:
$user = User::with('orders')->find(1, true);
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.
Im Folgenden erfahren Sie, wie Sie die Abfragekorrelationsfunktion von ThinkPHP verwenden. Sie ist sehr leistungsstark und kann die meisten Entwicklungsanforderungen erfüllen.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Abfragekorrelationsfunktion von ThinkPHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!