2016-08-08 54 views
0

Zum Beispiel gibt es A, B, C, D, E, F Tabellen.In yii2 Wie rufen wir durch Relationen

A hat a_id als Fremdschlüssel in B. B hat a_id und c_id als Fremdschlüssel. C hat d_id als Fremdschlüssel. D hat e_id als Fremdschlüssel.

Nun, wie kann ich eine Beziehung von A bis D. schreiben Als A keine direkte Beziehung zu D.

Von A bis C habe ich die Beziehung, wie unten schreiben.

public function C 
{ 
    return $this->hasMany(C::className(), ['c_id' => 'c_id']) 
      ->via('B'); 
} 

Wie komme ich durch Beziehungen von A nach D ?? Ich kann nicht die Syntax überall online finden .. Thanks ..

Antwort

0

Ich hatte ähnliches Problem, wenn ich mit yii2 von A gestartet man Bezug auf B haben muß, von B nach C und von C nach D Verbindung, wie Dies gilt für alle Modelle. So ist die Funktion wie diese in A aussehen wird es wie folgt aussehen (I Haupt-ID wich in einem Modell hinzugefügt ist ID_A):

public function B 
{ 
    return $this->hasMany(B::className(), ['a_id' => 'id_A']) 

} 

Das gleiche gilt für B zu C sein wird, in Modell B Sie haben:

Merken Sie sich diese Verbindung C::className(), ['id_C' => 'c_id'] ist von der Spalte vom nächsten Modell, das Sie zu diesem Modell benötigen, wo Sie sind, Daten müssen verwandt sein. Danach müssen Sie App das Suchmodell für das Hauptmodell (A) festlegen. Die Suche muss so aussehen. Zuerst fügen Sie das Suchmodell ein:

public $id_C 
Public $c_id ... 

alle Variablen, die Sie von anderen Modellen hinzufügen. Und danach fügen Sie sie in Tannen Reihe in

public function rules() 
    { 
     return [ 
      [[......, 'id_C','c_id'...(all var you need) ]] 
      .....] } 

Nachdem Sie alle von ihnen in der ersten Reihe hinzufügen (es wird sie sicher machen) gehen zu

public function search($params) 
    { $query = A::find() 
     ->select(...) 
     ->where (...) 
     ->joinWith(B)->joinWith(A.B)->joinWith(A.B.C).... how many you need. 
     ;