Heim  >  Artikel  >  Backend-Entwicklung  >  Anwendungsbeispiele für hasOne, hasMany und viele-zu-viele verwandte Abfragen in Yii2 (Bild)

Anwendungsbeispiele für hasOne, hasMany und viele-zu-viele verwandte Abfragen in Yii2 (Bild)

黄舟
黄舟Original
2017-03-30 09:18:102159Durchsuche

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

andere Vorteile gibt. Der Autor hat derzeit diese beiden häufig genutzten Vorteile entdeckt. Es gibt keine anderen verwandten Abfragen, wie z. B. eine yiidbQuery-Abfrage oder eine native SQL-Anweisungsabfrage. Wenn die Abfrage in der Liste angezeigt wird, ist die Kopfzeile der Tabelle schwarz.

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']);    
 }

Hinweise: Die common_tag-Tabelle hier ist Eine Zwischentabelle: Nachdem die Zwischentabelle common_tag mithilfe von hasMany mit der Kundentabelle verknüpft wurde, muss am Ende joinWith(['tag']) hinzugefügt werden, um die Tag-Tabelle zuzuordnen. onCondition ist eine Methode mit zusätzlichen Bedingungen.

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.

Hinweise

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!

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