Cakephp 3 contain dans contain ?

Par fital, il y a 10 ans


Salut, je suis entrain de faire un plugin commentaire et je bloque à un endroit :

Voici ma requête :

<?php public function view($slug = null) { $article = $this->Articles->find()->select([ 'Articles.id', 'Articles.title', 'Articles.slug', 'Articles.content', 'Articles.created', 'Articles.online', 'Users.username', 'Users.slug', 'Users.id', 'Categories.name', 'Categories.id' ])->where(['Articles.slug'=>$slug])->contain(['Categories','Users','Comments'])->first(); $this->set('article', $article); $this->set('_serialize', ['article']); } ?>

Ma question est la suivante, je cherche à joindre la table user dans le contain "Comments". Comment est-ce possible à faire ?

Merci beaucoup !

4 réponses

Xeta, il y a 10 ans

Hello,

->contain([ 'Categories', 'Users', 'Comments', 'Comments.Users' ])

A condition qu'il y ais une relation entre les 2 bien sûr.

fital, il y a 10 ans

@Xeta: super ça fonctionne ! merci :)

Par contre, comment tu fais pour sélectionner uniquement certain champs ? Oo quand j'essaie de rajouter par exemple "Comments.Users.username" ça me dit :

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Comments.Users.username' in 'field list'

Merci d'avance :)

Ferias Quarante, il y a 10 ans

Quelque chose comme ça

->contain([ 'Categories', 'Users' => function ($q) { return $q->select(['Users.id', 'Users.username']); }, 'Comments', 'Comments.Users' ])
fital, il y a 10 ans

Super ! tout fonctionne à merveille ^^ merci à vous deux !