Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

j'ai 3 tables
users(id,username) hasMany commentaires(id,user_id,content,billet_id),
billets hasmany commentaires, et aussi
users hasmany billet(id,title)

je veux avoir la liste des commentaires avec touts les users et billets associé
pour cela j'ai procédé comme suit

<?php
namespace BlogManager\Model\Table;
use Cake\ORM\Query;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class BilletsTable extends Table
{
    public function initialize(array $config)
    {
        $this->displayField('titre');
        $this->primaryKey('id');

        $this->addBehavior('Timestamp');

        $this->addBehavior('Timestamp');
        $this->belongsTo('Users', [
            'foreignKey' => 'user_id',
        ]);

        $this->belongsTo('Categories', [
            'foreignKey' => 'categorie_id',
        ]);

         $this->hasMany('Commentaires', [
            'foreignKey' => 'billet_id',
            'dependent' => true,
            'cascadeCallbacks' => true
        ]);
    }
}

pour commentaire

?php
namespace BlogManager\Model\Table;
use Cake\ORM\Query;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class CommentairesTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');
        $this->displayField('titre');
        $this->primaryKey('id');

        $this->belongsTo('Users', [
            'foreignKey' => 'user_id',
        ]);
        $this->belongsTo('Billets', [
            'foreignKey' => 'billet_id',
        ]);
    }

}

et enfin pour user

<?php
namespace BlogManager\Model\Table;
use Cake\ORM\Query;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table
{
    public function initialize(array $config)
    {
        //parent::initialize();
        $this->addBehavior('Timestamp');
        $this->hasMany('Categories', [
            'foreignKey' => 'user_id',
            'dependent' => true
        ]);
        $this->hasMany('Commentaires', [
            'foreignKey' => 'user_id',
            'dependent' => true
        ]);

    }

    public function findAuth(\Cake\ORM\Query $query, array $options) {
    $query->select(['id', 'role', 'avatar', 'username'])
            ->where(['Users.active' => 1]);
            return $query;

    }

 public function findShort(Query $query)
    {
        return $query->select([
            'id',
            'username',
            'email'
        ]);
    }

}

dans mon controller BlogController je fait ceci:

public function index()
    {
        $this->loadModel('Commentaires');
        $this->paginate = [
            'maxLimit' => 20
        ];

        $comment = $this->Commentaires
            ->find()
            ->contain([
                'Billets',
                'Users' => function ($q) {
                    return $q->find('short');
                }
            ])
            ->order([
                'Commentaires.created' => 'desc'
            ])
            ->where([
                'Commentaires.statut' => 1
            ]);

        $comment = $this->paginate($comment);

        $this->set(compact('comment'));
        }

Ce que je veux

je veux pouvoir optenir la liste des commentaires avec les billets et users associés

Ce que j'obtiens

Commentaires is not associated with Billets

1 réponse


romses
Auteur
Réponse acceptée

Merci ces résolu