Bonjour à tous,

Je rencontre une difficulté au développement d'une application via Cakephp. En effet, je souhaite afficher dans une vue, plusieurs articles (titre, URL, etc.) avec la catégorie à laquelle est associé chaque article.

Pour cela j'ai au sein de ma table "Articles'", une clé étrangère pointant sur l'id de la catégorie. Néanmoins je ne vois pas comment faire parvenir à la vue, les informations relatives à l'article (titre, URL, etc.), ainsi que le nom de la catégorie (et non son id).

Merci pour votre aide.

6 réponses


passealasuite
Auteur
Réponse acceptée

Oui, j'ai bien fait la liaison :

<?php
class ArticlesTable extends Table
{
    public function initialize(array $config)
    {
        $this->belongsTo('Categories',[
                'className' => 'Categories',
                'foreignKey' => 'id']
        )
    }
}

Voici le controller :

<?php
class ArticlesController extends AppController
{
    public function index(){
        $articles = $this->Articles->find('all');
        $this->set(compact('Articles'));
    }
}

Je pense avoir trouvé une piste avec la fonction Eager Loading. Cela permet de remonter les données via l'associaton. Néamoins j'ai peur que cela soit trop lourd en traitement.

$articles = $this->Articles->find('all', ['contain' => ['Categories']]);

Merci pour ton aide.

Grafikart
Réponse acceptée

Attention à la majuscule $this->set(compact('articles'));
Ensuite dans ta page tu boucles sur les articles et tu récupère la catégorie en faisant $article->category->...

Quelle version de CakePHP ?

Oups... Version 3.

Merci.

Tu as bien fait la liaison belongsTo au niveau de ta class Table Article ? Tu peux montrer le code actuel de ton controller ?

Surper. Cela fonctionne bien avec le Eager Loading.

Merci !