Heim >PHP-Framework >Denken Sie an PHP >Detaillierte Erläuterung der Abfragekorrelationsfunktion von ThinkPHP

Detaillierte Erläuterung der Abfragekorrelationsfunktion von ThinkPHP

PHPz
PHPzOriginal
2023-04-11 10:30:152034Durchsuche

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 = [&#39;age&#39;];

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!

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