web-dev-qa-db-fra.com

Comment utiliser la constante dans la condition ON dans Yii2 hasMany relation

J'essaie de créer une association polymorphe, ce qui est courant dans Rails mais malheureusement pas dans Yii2. Dans le cadre de l'implémentation, je dois définir la relation:

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

Mais cela ne fonctionne pas, car 'Person' est traité comme un attribut du modèle actuel, mais c'est une constante (nom de classe pour l'association polymorphe).

Si j'essaie d'utiliser 'andWhere', cela ajoute bien sûr la condition dans une clause WHERE au lieu de la clause ON, ce qui ne fait que renvoyer les enregistrements avec l'image existante.

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

Comment définir la relation? Il n'y a pas de méthode andOn.

27
Tibor Nagy

Dans ce cas, vous pouvez modifier la condition ON avec la méthode andOnCondition:

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

Documents officiels:

60
arogachev