Bonjour,
Voila je rencontre un petit problème avec mon code.
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'));
}
je veux pouvoir optenir la liste des commentaires avec les billets et users associés
Commentaires is not associated with Billets