web-dev-qa-db-ja.com

Yii2 hasMany関係のON条件で定数を使用する方法

Railsで一般的ですが、残念ながらYii2ではそうではありません)ポリモーフィックな関連付けを作成しようとしています。

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

しかし、「Person」は現在のモデルの属性として扱われるため、これは機能しませんが、定数(多態的な関連付けのクラス名)です。

「andWhere」を使用しようとすると、もちろん、ON句ではなくWHERE句に条件が追加されるため、既存の画像を持つレコードのみが返されます。

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

関係を定義するにはどうすればよいですか? andOnメソッドはありません。

27
Tibor Nagy

この場合、andOnConditionメソッドを使用してON条件を変更できます。

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

公式ドキュメント:

60
arogachev