Model lié

Par romses, il y a 9 ans


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, il y a 9 ans

Merci ces résolu