2015-05-28 35 views
13

Próbuję utworzyć polimorficzne skojarzenie, co jest typowe w Railsach, ale niestety nie w Yii2. W ramach realizacji muszę zdefiniować relację:Jak używać stałej w stanie ON w Yii2 ma wiele relacji

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

Ale to nie działa, ponieważ „osoba” traktowana jest jako atrybut obecnego modelu, ale jest stała (nazwa klasy dla stowarzyszenie polimorficzne).

Jeśli spróbuję użyć "andWhere", to doda warunek oczywiście w klauzuli WHERE zamiast w klauzuli ON, powodując, że zwracane są tylko rekordy z istniejącym obrazem.

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

Jak zdefiniować relację? Nie ma metody andOn.

Odpowiedz

37

W tym przypadku można modyfikować na warunkach z andOnCondition metody:

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

oficjalne docs:

+1

dzięki za link! – iGbanam