2015-05-28 4 views
13

Ich versuche, eine polymorphe Assoziation zu erstellen, was in Rails aber leider nicht in Yii2 üblich ist. Im Rahmen der Umsetzung muß ich die Beziehung definieren:Wie zu verwenden Konstante in der ON-Bedingung in Yii2 hasMany Beziehung

public function getImages() 
{ 
    return $this->hasMany(RecipeImage::className(), 
     ['imageable_id' => 'id', 'imageable_type' => 'Person']); 
} 

Aber das funktioniert nicht, weil ‚Person‘ als Attribut des aktuellen Modells behandelt wird, aber es ist eine Konstante (Klassenname für die polymorphe Assoziation).

Wenn ich versuche, 'andWhere' zu verwenden, fügt es natürlich die Bedingung in einer WHERE-Klausel anstelle der ON-Klausel hinzu, was dazu führt, dass nur Datensätze mit vorhandenem Bild zurückgegeben werden.

public function getImages() 
{ 
    return $this->hasMany(RecipeImage::className(), ['imageable_id' => 'id'])-> 
     andWhere(['imageable_type' => 'Ingredient']); 
} 

Wie kann ich die Beziehung definieren? Es gibt keine andOn-Methode.

Antwort

37

In diesem Fall können Sie den AN-Zustand mit andOnCondition Methode ändern können:

public function getImages() 
{ 
    return $this->hasMany(RecipeImage::className(), ['imageable_id' => 'id']) 
     ->andOnCondition(['imageable_type' => 'Person']); 
} 

Offizielle Dokumente:

+1

danke für den Link! – iGbanam

Verwandte Themen