Heim >Backend-Entwicklung >PHP-Tutorial >Anwendungsbeispiele für hasOne, hasMany und viele-zu-viele verwandte Abfragen in Yii2 (Bild)
hasOne und hasMany sind die einzigartigen Funktionen von Yii2, die für Multi-Table-Assoziations-Abfragen verwendet werden. Es wird empfohlen, sie bei der Verwendung von Multi-Table-Assoziationsabfragen zu verwenden. In diesem Artikel wird hauptsächlich die detaillierte Verwendung von hasOne, hasMany und Many-to-many-bezogenen Abfragen in Yii2 vorgestellt. Freunde, die es benötigen, können sich auf
Vorwort
hasOne und hasMany sind die einzigartigen Funktionen von Yii2 für Abfragen mit mehreren Tabellen. Es wird empfohlen, sie bei Abfragen mit mehreren Tabellen zu verwenden. Warum? Da die Ergebnisse verwandter Abfragen auf diese Weise die eigene Header-Sortierfunktion von Yii2 sowie den ID-Speicherwert der Eingabe in CheckboxColumn beibehalten, muss sich jeder darüber informieren, ob es Yii2s hasOne und hasMany Abfragen mit mehreren Tabellen, egal ob es sich um ein Dokument oder einen Artikel handelt, können den Referenzmaster tatsächlich leicht finden. Aber warum hat der Autor diesen Artikel eigentlich sehr einfach geschrieben? In den vorherigen Informationen habe ich die Verwendung von Many-to-Many-Abfragen nicht gesehen. Ich werde mich oder andere nicht wiederholen. Der Schwerpunkt dieses Artikels liegt auf der Verwendung von Many-to-Many-bezogenen Abfragen, um Ihr Wissen zu erweitern.Anforderungsanalyse
1 Verwenden Sie eine Abfrageanweisung, um alle Daten in der Liste eins zu eins anzuzeigen. Eins-zu-Eins-Viele- und Viele-zu-Viele-Beziehungen. 2. Die eigene Header-Sortierfunktion von Yii2 und der ID-Speicherwert der Eingabe in CheckboxColumn können nicht zerstört werden.Rendering
1. Eins-zu-eins, eins-zu-viele, viele-zu-viele, Header-Sortierung. 2. Der ID-Wert der Eingabe in CheckboxColumn.Code-Analyse
Many-to-many
Beispiel: Ein Kunde kann mehrere Labels haben und ein Label kann für mehrere Kunden gelten. 1. Fügen Sie den folgenden Code zu TSales hinzu (Modell der Kundentabelle):
public function getcommon_tag() { return $this->hasMany(CommonTag::className(), ['itemid' => 't_id'])->onCondition(['idtype' => "内容"])->joinWith(['tag']); }2. Fügen Sie den folgenden Code zum CommonTag (Zwischentabellenmodell) hinzu, um die Tag-Tabelle zuzuordnen. Verwenden Sie einfach hasOne.
public function gettag() { return $this->hasOne(Tag::className(), ['id'=>'tagid']); }3. Fügen Sie den folgenden Code zu TSalesSearch (Suchmodell des Kunden) hinzu, um die Zwischentabelle common_tag zu verknüpfen: $query->joinWith(['common_tag']);4 . Der Seitenausgabecode lautet wie folgt:
[ 'attribute' => 'tag_id', 'value' => function ($model) { $_tag=$model->getRelatedRecords()['common_tag']; if(!empty($_tag)){ $tagName=""; foreach ($_tag as $key => $value) { $tagName.=$value['tag']['name'].'/'; } return rtrim($tagName,'/'); } }, ],Hinweis: $model->getRelatedRecords() wird verwendet, um den Wert von [_lated:yiidbBaseActiveRecord:private]
array zu erhalten.
Eins-zu-viele
1. hasMany ist an der vorherigen Viele-zu-Viele-Nutzung beteiligt, um eine Eins-zu-Viele-Nutzung zu erreichen -many, entfernen Sie einfach den JoinWith am Ende. Die anderen Konfigurationen und Ausgabemethoden sind gleich.Eins-zu-eins
1 Die Eins-zu-Eins-Nutzung ist ebenfalls eine Eins-zu-Eins-Nutzung das Gleiche wie hasMany, daher besteht hier keine Notwendigkeit. 1. Verwenden Sie die folgende Codeausgabe (common_tag.name), um den Wert aus dem zugehörigen zu erhalten Wenn der Wert nicht gefunden wird, sollte das Namensfeld in Ihrer Kundentabelle vorhanden sein und der Wert leer sein. Wenn der Name wiederholt wird, werden zuerst die Felder der Haupttabelle ausgegeben model->getRelatedRecords() Holen.Das obige ist der detaillierte Inhalt vonAnwendungsbeispiele für hasOne, hasMany und viele-zu-viele verwandte Abfragen in Yii2 (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!