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
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('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 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
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
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"; }
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 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('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.
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!