Bonjour,
J'ai une page qui affiche tout les articles disponnible sur le site ,
$d = $this->Post->find('all');
$this->set('posts', $d);
Voilà ce que cela me rend :
Je voudrais ensuite récuperer le nom de la categorie avec la conditon id = Post.category_id. Ensuite pouvoir relancer ca dans par exemple
(int) 6 => array( 'Post' => array('category_name' => ?'))
Bonsoir.
Si tu utilises le behavior Containable, il te suffit par exemple de faire :
$d = $this->Post->find('all', [
'contain' => ['Category.name']
]);
$this->set('posts', $d);
Il te faut par contre avoir bien défini tes associations.
Ensuite lors de ta boucle pour l'affichage :
foreach ($posts as $post):
/* ... */
echo $post['Post']['Category']['name'];
/* ... */
endforeach;
Bonsoir,
$d['posts'] = $this->Posts->find('all')->contain(['Categories']);
$this->set($d);
Puis :
foreach($posts as $post):
print($post->category->name);
endforeach;
Merci vous deux pour vos réponses.
Comment va t-il savoir qu'il doit aller chercher dans la table 'Categories' et que c'est par rapport a son id ?
Bonjour, cela est une jointure afin de pouvoir récupérer les informations d'une catégorie liée à un article.
$d['posts'] = $this->Post->find('all')->contain(['Categories']);
$this->set('posts', $d);
debug($d);
-->
Fatal Error
Error: Call to a member function contain() on array
Bonjour, il vous faut une clé dans votre table posts nommer : category_id.
Ceci dit l'erreur à aucun rapport avec la clé étrangère ou non.... Il ne trouve pas la fonction contain()l, essayer de tout passée en tableau, avec le find();
EDIT (18:36) :
Le souci est résolu, il suffisait de manipuler les modèles (actsAs, belongsTo), et de procédé a la jointure.