Как использовать константу в состоянии ON в отношении Yii2 hasMany

Я пытаюсь создать полиморфную ассоциацию, что распространено в Rails, но, к сожалению, не в Yii2. В рамках реализации мне нужно определить отношение:

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

Но это не работает, потому что "Person" рассматривается как атрибут текущей модели, но это константа (имя класса для полиморфной ассоциации).

Если я попытаюсь использовать «andWhere», он, конечно, добавит условие в предложение WHERE вместо предложения ON, в результате чего будут возвращены только записи с существующим изображением.

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

Как определить отношение? Метода andOn нет.


person Tibor Nagy    schedule 28.05.2015    source источник


Ответы (1)


В этом случае вы можете изменить условие ON с помощью метода andOnCondition:

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

Официальные документы:

person arogachev    schedule 28.05.2015