Recupérer le nom par son id dans une autre table.

Par Mag Ouille, il y a 9 ans


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' => ?'))

7 réponses

Lartak, il y a 9 ans

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

Bonsoir,

$d['posts'] = $this->Posts->find('all')->contain(['Categories']); $this->set($d);

Puis :

foreach($posts as $post): print($post->category->name); endforeach;
Mag Ouille, il y a 9 ans

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 ?

Xen0risDEV, il y a 9 ans

Bonjour, cela est une jointure afin de pouvoir récupérer les informations d'une catégorie liée à un article.

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

Faut t-il une foreign key dans la base de donnée pour le contain?

Xen0risDEV, il y a 9 ans

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.