Heim Backend-Entwicklung PHP-Tutorial Detaillierte Beispiele für den Betrieb von Multi-Table-Assoziationen in YII2

Detaillierte Beispiele für den Betrieb von Multi-Table-Assoziationen in YII2

Jul 22, 2017 pm 03:02 PM
yii2 如何 操作

Vor kurzem bin ich bei der Arbeit auf Probleme im Zusammenhang mit der YII2-Mehrtabellenzuordnung gestoßen. Ich habe festgestellt, dass es im Internet nicht viele Informationen zu diesem Aspekt gibt, also habe ich darüber nachgedacht, das Problem selbst zu lösen, damit ich bei Bedarf darauf zurückgreifen kann Ich brauche es in Zukunft oder Freunde, die es brauchen, können darauf verweisen. Der folgende Artikel führt Sie hauptsächlich in die Verwendung von Multi-Table-Assoziationen in YII2 ein. Freunde, die es brauchen, können einen Blick darauf werfen.

Vorwort

Dieser Artikel gibt eine kurze Einführung in die auf mehrere Tabellen bezogene Abfrage von YII2.0. Der Artikel stellt es im Detail anhand von Beispielcode vor. Ich werde im Folgenden nicht viel sagen. Werfen wir einen Blick auf die detaillierte Einführung:

Erklären wir zunächst die Tabellenstruktur

Tabellenstruktur

Jetzt gibt es Bestelltabelle, Benutzertabelle, Produktlistentabelle, Produktbestandstabelle

Wenn Sie in YII andere Tabellen für die Abfrage direkt verknüpfen möchten, müssen Sie zuerst deren Verknüpfung im Modell definieren

Bestellung


class Order extends \yii\db\ActiveRecord.{
 
 // 关联函数以get+要关联的数据表名来命名
 // 这是获取下订单的客户
 public function getUser(){
  
  // 第一个参数为要关联的子表模型类名,
  // 第二个参数指定 通过子表的user_id,关联主表的usesr_id字段
  // 这里写清楚点大概意思就是User.user_id => Order.user_id
 return $this->hasMany(User::className(), ['user_id' => 'user_id']);
 }
}
Nach dem Login kopieren

1. HasMany und hasOne verwenden

Es gibt zwei Arten von Assoziationen zwischen Tabellen in Yii2. Sie werden verwendet, um die Assoziation zwischen zwei Modellen anzugeben.

●Eins-zu-viele: hasMany ●Eins-zu-eins: hasOne


●Rückgabeergebnisse: Die Rückgabeergebnisse dieser beiden Methoden sind yiidbActiveQuery-Objekte (falls gewünscht). Geben Sie die endgültige Standard-Array-Form zurück. Denken Sie daran, den Parameter asArray() hinzuzufügen)


●Der erste Parameter: der Klassenname des zugehörigen Modells.


●Der zweite Parameter: ist ein Array, wobei der Schlüssel das Attribut im zugehörigen Modell und der Wert das Attribut im aktuellen Modell ist.


Zugehörige Verwendung

Jetzt versuchen wir, eine Bestellung zu bekommen


//获取订单信息
$order = Order::findOne(1);
//根据订单信息获取到用户信息
$user = $order->user;
Nach dem Login kopieren
Natürlich können Sie die with-Methode verwenden, die einfacher aussieht. Der Parameter von with ist der Name der Beziehung, der user.

< in getUser im Modell definiert ist 🎜>


Der obige Code generiert und führt die folgende SQL-Anweisung aus
//返回订单信息(包括用户信息)
$order = Order::find(1)->with(&#39;user&#39;);
//或者
$order = Order::find(1)->getUser();
Nach dem Login kopieren


SELECT * FROM order WHERE id=1;
SELECT * FROM user  WHERE user.user_id=order.user_id;
Nach dem Login kopieren
Wie aus dem ersichtlich ist oben, Zugriff auf a Es gibt zwei Methoden für die Zuordnung

●Bei Aufruf als Funktion wird ein ActiveQuery-Objekt zurückgegeben ($customer->getOrders()->all())

            ●Bei Aufruf als Attribut wird das Ergebnis des Modells ($customer->orders) direkt zurückgegeben


Zugehöriger Ergebnis-Cache

Wenn dies der Fall ist, hat sich die Bestelltabelle geändert. Wir hoffen, dass Sie bei einer erneuten Abfrage


feststellen werden, dass es keine Änderung gibt die Bestellung noch einmal. Der Grund dafür ist, dass die Datenbank nur abgefragt wird, wenn $order->user zum ersten Mal ausgeführt wird, die Ergebnisse zwischengespeichert werden und SQL bei nachfolgenden Abfragen nicht ausgeführt wird.
$user = $order->user;
Nach dem Login kopieren

Was ist, wenn Sie SQL erneut ausführen möchten? Sie können


//先释放缓存
unset($order->user);
$order->user;
Nach dem Login kopieren

Kreuztabellenabfrage
Hier kommt der Schlüssel Punkt! Wie Sie dem Tabellenstrukturdiagramm oben entnehmen können, stehen die Tabelle „Benutzer“ und „Order_goods“ nicht in direktem Zusammenhang. Wenn wir also anhand der Benutzerinformationen herausfinden möchten, welche Produkte der Benutzer gekauft hat, müssen wir die beiden Tabellen über die Tabelle „Bestellung“ verknüpfen. Was also tun? Die erste ist die Modellebene. Da wir die Überprüfung anhand des Benutzers durchführen, gehen wir zur Ebene des Benutzermodells, um die Zuordnung zu definieren.

Benutzer


public function getOrder() {
 return $this->hasMany(Order::className(), [&#39;user_id&#39; => &#39;user_id&#39;]);
}
 
public function getOrderGoods() {
 return $this->hasMany(OrderGoods::className(), [&#39;order_id&#39; => &#39;order_id&#39;])->
  via(&#39;order&#39;);
}
Nach dem Login kopieren

Hinweis hier: getOrderGoods Die beiden order_id Verweisen Sie auf die order_id in der mit getOrder verknüpften Bestellung, und die erste order_id bezieht sich auf die order_id in OrderGoods. Aber! Wir haben auch die einfachste Methode, nämlich die Verwendung von SQL-Anweisungen!


Dies ist im Grunde der gesamte zugehörige Teil
$map = &#39;select
  user.name,
  order.id,
  order_goods.goods_id,
  goods.goods_name,
  stock.stock_count
  from user
  LEFT JOIN order   ON order.user_id = user.user_id
  LEFT JOIN order_goods ON order_goods.order_id = order.order_id
  LEFT JOIN goods   ON goods.goods_id = order_goods.goods_id
  LEFT JOIN stock   ON stock.goods_id = goods.goods_id&#39;;

$list1 = Article::findBySql($map)->asArray()->all();
Nach dem Login kopieren

Zusammenfassung

Das obige ist der detaillierte Inhalt vonDetaillierte Beispiele für den Betrieb von Multi-Table-Assoziationen in YII2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Tutorial zur PyCharm-Nutzung: Führt Sie ausführlich durch die Ausführung des Vorgangs Tutorial zur PyCharm-Nutzung: Führt Sie ausführlich durch die Ausführung des Vorgangs Feb 26, 2024 pm 05:51 PM

PyCharm ist eine sehr beliebte integrierte Entwicklungsumgebung (IDE) für Python. Sie bietet eine Fülle von Funktionen und Tools, um die Python-Entwicklung effizienter und komfortabler zu gestalten. Dieser Artikel führt Sie in die grundlegenden Betriebsmethoden von PyCharm ein und stellt spezifische Codebeispiele bereit, um den Lesern einen schnellen Einstieg zu erleichtern und sich mit der Bedienung des Tools vertraut zu machen. 1. Laden Sie PyCharm herunter und installieren Sie es. Zuerst müssen wir zur offiziellen Website von PyCharm gehen (https://www.jetbrains.com/pyc).

Was ist Sudo und warum ist es wichtig? Was ist Sudo und warum ist es wichtig? Feb 21, 2024 pm 07:01 PM

sudo (Superuser-Ausführung) ist ein Schlüsselbefehl in Linux- und Unix-Systemen, der es normalen Benutzern ermöglicht, bestimmte Befehle mit Root-Rechten auszuführen. Die Funktion von sudo spiegelt sich hauptsächlich in den folgenden Aspekten wider: Bereitstellung von Berechtigungskontrolle: sudo erreicht eine strikte Kontrolle über Systemressourcen und sensible Vorgänge, indem es Benutzern erlaubt, vorübergehend Superuser-Berechtigungen zu erhalten. Normale Benutzer können über sudo bei Bedarf nur vorübergehende Berechtigungen erhalten und müssen sich nicht ständig als Superuser anmelden. Verbesserte Sicherheit: Durch die Verwendung von sudo können Sie die Verwendung des Root-Kontos bei Routinevorgängen vermeiden. Die Verwendung des Root-Kontos für alle Vorgänge kann zu unerwarteten Systemschäden führen, da für jeden fehlerhaften oder nachlässigen Vorgang die vollen Berechtigungen gewährt werden. Und

Schritte und Vorsichtsmaßnahmen für die Linux-Bereitstellung Schritte und Vorsichtsmaßnahmen für die Linux-Bereitstellung Mar 14, 2024 pm 03:03 PM

Betriebsschritte und Vorsichtsmaßnahmen für LinuxDeploy LinuxDeploy ist ein leistungsstarkes Tool, mit dem Benutzer schnell verschiedene Linux-Distributionen auf Android-Geräten bereitstellen können, sodass Benutzer ein vollständiges Linux-System auf ihren Mobilgeräten erleben können. In diesem Artikel werden die Betriebsschritte und Vorsichtsmaßnahmen von LinuxDeploy ausführlich vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, dieses Tool besser zu nutzen. Arbeitsschritte: LinuxDeploy installieren: Zuerst installieren

Was tun, wenn Sie vergessen, F2 für das Win10-Startkennwort zu drücken? Was tun, wenn Sie vergessen, F2 für das Win10-Startkennwort zu drücken? Feb 28, 2024 am 08:31 AM

Vermutlich haben viele Benutzer zu Hause mehrere ungenutzte Computer und haben das Einschaltpasswort völlig vergessen, weil sie längere Zeit nicht benutzt wurden. Sie möchten also wissen, was zu tun ist, wenn sie das Passwort vergessen? Dann lasst uns gemeinsam einen Blick darauf werfen. Was tun, wenn Sie vergessen, F2 für das Win10-Startkennwort zu drücken? 1. Drücken Sie den Netzschalter des Computers und drücken Sie dann beim Booten F2 (verschiedene Computermarken haben unterschiedliche Tasten zum Aufrufen des BIOS). 2. Suchen Sie in der BIOS-Schnittstelle nach der Sicherheitsoption (der Speicherort kann je nach Computermarke unterschiedlich sein). Normalerweise im Einstellungsmenü oben. 3. Suchen Sie dann die Option „SupervisorPassword“ und klicken Sie darauf. 4. Zu diesem Zeitpunkt kann der Benutzer sein Passwort sehen und gleichzeitig die Option „Aktiviert“ daneben finden und auf „Dis“ umstellen.

So deaktivieren Sie die Aktionstaste auf dem iPhone 15 Pro und 15 Pro Max So deaktivieren Sie die Aktionstaste auf dem iPhone 15 Pro und 15 Pro Max Nov 07, 2023 am 11:17 AM

Apple brachte einige Pro-exklusive Hardwarefunktionen in das iPhone 15 Pro und 15 Pro Max ein, die die Aufmerksamkeit aller auf sich zogen. Wir sprechen von Titanrahmen, schlanken Designs, dem neuen A17 Pro-Chipsatz, einem aufregenden 5-fach-Teleobjektiv und mehr. Von all dem Schnickschnack, der den iPhone 15 Pro-Modellen hinzugefügt wurde, bleibt die Aktionstaste ein herausragendes und hervorstechendes Merkmal. Es versteht sich von selbst, dass es eine nützliche Ergänzung zum Starten von Aktionen auf Ihrem iPhone ist. Allerdings könnten Sie versehentlich die Aktionstaste gedrückt halten und die Funktion unbeabsichtigt auslösen. Ehrlich gesagt ist es ärgerlich. Um dies zu vermeiden, sollten Sie die Aktionstaste auf dem iPhone 15 Pro und 15 Pro Max deaktivieren. lassen

Huawei Mate60 Pro Screenshot-Bedienschritte teilen Huawei Mate60 Pro Screenshot-Bedienschritte teilen Mar 23, 2024 am 11:15 AM

Mit der Beliebtheit von Smartphones ist die Screenshot-Funktion zu einer der wesentlichen Fähigkeiten für die tägliche Nutzung von Mobiltelefonen geworden. Als eines der Flaggschiff-Handys von Huawei hat die Screenshot-Funktion des Huawei Mate60Pro natürlich große Aufmerksamkeit bei den Nutzern auf sich gezogen. Heute werden wir die Screenshot-Bedienungsschritte des Huawei Mate60Pro-Mobiltelefons teilen, damit jeder bequemer Screenshots machen kann. Erstens bietet das Huawei Mate60Pro-Mobiltelefon eine Vielzahl von Screenshot-Methoden, und Sie können die Methode auswählen, die Ihren persönlichen Gewohnheiten entspricht. Im Folgenden finden Sie eine detaillierte Einführung in mehrere häufig verwendete Abfangfunktionen:

CSS-Webseiten-Scroll-Überwachung: Überwachen Sie das Scrollen von Webseiten und führen Sie entsprechende Vorgänge aus CSS-Webseiten-Scroll-Überwachung: Überwachen Sie das Scrollen von Webseiten und führen Sie entsprechende Vorgänge aus Nov 18, 2023 am 10:35 AM

CSS-Webseiten-Scroll-Überwachung: Überwachen Sie das Scrollen von Webseiten und führen Sie entsprechende Vorgänge aus. Mit der kontinuierlichen Entwicklung der Front-End-Technologie werden die Effekte und Interaktionen von Webseiten immer vielfältiger. Unter diesen ist die Scroll-Überwachung eine gängige Technologie, mit der einige Spezialeffekte oder Vorgänge basierend auf der Scroll-Position ausgeführt werden können, wenn der Benutzer auf der Webseite scrollt. Im Allgemeinen kann die Scroll-Überwachung über JavaScript implementiert werden. In einigen Fällen können wir den Effekt der Scroll-Überwachung jedoch auch durch reines CSS erzielen. In diesem Artikel wird erläutert, wie das Scrollen von Webseiten über CSS implementiert wird

Benutzerdefinierte Aktionsschaltflächen: Entdecken Sie die Personalisierung auf dem iPhone 15 Pro Benutzerdefinierte Aktionsschaltflächen: Entdecken Sie die Personalisierung auf dem iPhone 15 Pro Sep 24, 2023 pm 03:05 PM

Apples iPhone 15 Pro und iPhone 15 Pro Max führen eine neue programmierbare Aktionstaste ein, die den herkömmlichen Klingel-/Stummschalter über den Lautstärketasten ersetzt. Lesen Sie weiter, um zu erfahren, was die Aktionsschaltfläche bewirkt und wie Sie sie anpassen können. Eine neue Aktionstaste bei Apple iPhone 15 Pro-Modellen ersetzt den herkömmlichen iPhone-Schalter, der Klingeln und Lautlos aktiviert. Standardmäßig aktiviert die neue Taste weiterhin beide Funktionen durch langes Drücken, aber Sie können durch langes Drücken auch eine Reihe anderer Funktionen ausführen, darunter Schnellzugriff auf die Kamera oder Taschenlampe, die Aktivierung von Sprachnotizen, den Fokusmodus, die Übersetzung usw Barrierefreiheitsfunktionen wie eine Lupe. Sie können es auch mit einer einzigen Verknüpfung verknüpfen, was eine Menge weiterer Möglichkeiten eröffnet

See all articles