2014-05-12 6 views
3

J'utilise yii2, j'ai 3 tables: messages, fans, commentaires et je veux utiliser joinWith() pour obtenir les messages avec leurs commentaires et le nom du ventilateur (dans la table des fans) pour poster et commentaires. ce que je l'ai écrit est cette requête:utiliser Joins pour plusieurs tables dans yii2

<pre> 
facebook_posts::find()->joinwith('fans')->joinWith('comments')->all(); 
</pre> 

et j'ajouté ces deux fonctions pour les relations:

<pre> 
    public function getfans() { 
     return $this->hasOne(Fans::className(), ['id' => 'from_id'])->from(fans::tableName() . ' FBF'); 
    } 
    public function getComments() { 
     return $this->hasMany(Comments::className(), ['parent_id' => 'id'])->from(comments::tableName() . ' FBC'); 
    } 
</pre> 

cela me donne les messages et les données du ventilateur qui a écrit le message et ses commentaires mais ce dont j'ai besoin, ce sont les données du fan qui a écrit les commentaires aussi, alors comment puis-je joindre des commentaires avec la table des fans ??

Répondre

13

Assurez-vous que vous avez une relation fan dans votre modèle Comments, vous pouvez utiliser ce qui suit pour obtenir tous les commentaires pour chaque poste et la relation du ventilateur pour chaque commentaire:

facebook_posts::find()->joinWith('fans')->joinWith(['comments', 'comments.fan'])->all(); 
+0

thank u :) il fonctionne très bien – ruba

+0

Davey, et si vous vouliez utiliser une colonne de la table 'comments' ou peut-être la table 'fans' de la méthode where(), comment le feriez-vous? – Murilo

+0

@Murilo comme suit: '-> où (['comments.field1' => 'value1']) -> all()' ou '-> où (['comments.fan.field1' => 'value1']) -> all() ' – deacs