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
Réponse acceptée

Hello,

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

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

Ferias Quarante
Réponse acceptée

Quelque chose comme ça

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

@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 :)

fital
Auteur

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