Bonjour, j'ai un petit soucis tout con avec Cake 3,
J'ai un find basique
$post = $this->Posts->get($id, [
'contain' => ['Users', 'Categories']
]);
$this->set('post', $post);
Le problème c'est que le contain empèche le find !
Record not found in table "posts"
et si j'enlève le find il me trouve bien l'article et pourtant j'ai bien tous les modèles et les relations qui vont avec ..;
Je ne comprend donc pas !
Regardes ce que te propose sebtrays et si les associations sont bien faites et que ta table posts a bien des enregistrements, c'est que tes enregistrements n'ont soit pas de catégorie, soit pas d'utilisateur associé ou les deux.
Car si les associations que tu demandes dans ta requête SQL n'ont pas les valeurs définies dans ta table, il est normal qu'elle ne te retourne rien, il suffit qu'un de tes enregistrements n'ai pas une valeur définie par rapport aux associations pour qu' elle ne te retourne rien, d'où l'importance de la phase de validation.
Bonsoir,
Juste au cas où, si tu fais un fields dans ton find, n'oublis pas de mettre les clez étrangères dedans.
@Lartak, Que ce sqoit Find ou Get le problème est le même !
$posts = $this->Posts->find('all')
->contain(['Categories','Users']);
$this->set(compact('posts','users','categories'));
Bonjour,
la styntaxe de ton code n'est pas correcte.
$post = $this->Posts->find('all', [
'contain' => ['Users', 'Categories']
])->all();
$this->set('posts', $post);
Ensuite si tu veux recupérer dans ta vue les catégories avec une boucle foreach (si tu veux récupérer tout les posts), tu auras juste à faire:
$post->category->name
En espérant avoir pu t'aider.
la styntaxe de ton code n'est pas correcte.
Non, la syntaxe est correcte, il peut même faire :
$posts = $this->Posts->find()
->contain(['Categories','Users'])
->all();
Par contre, dans son get
il passe un id
et donc ne récupère qu'un enregistrement, alors que dans le find
il récupère tous les enregistrements, ce qui est totalement contradictoire, donc pour faire la même chose avec le find
, il devrait faire :
$post = $this->Posts->find()
->where(['id' => $id])
->contain(['Categories','Users'])
->first();
$this->Posts->find('all')
->contain(['Categories','Users']);
Je faisais référence au 'all' oublié surtout.
Après j'étais pas au courant que ça fonctionnais ça. =s
$this->set(compact('posts','users','categories'));
En tout cas très juste pour le reste. :)
Je faisais référence au 'all' oublié surtout.
Étant donné qu'il spécifie le 'all'
dans la méthode find
, il ne lui est pas nécessaire d'ajouter le ->all()
Je récapitule le soucis, c'est pour récuperer tout mes articles je fais un find all avec le contain, le problème c'est lorsque je débug la variable $post il me donne null ^^ donc il ne trouve pas les articles lorsque j'ajoute les contain ...
$posts = $this->Posts->find()
->contain(['Categories','Users'])
->all();
$this->set(compact('posts','users','categories'));
Hum. Dans ton model PostTable tu as biens:
$this->belongsTo('Categories', [
'foreignKey' => 'category_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
?