Bonjour à tous,
j'ai deux classes associées, class Post a belongsTo classe User qui a hasMany Post,
ce que j'ai ecrit Post.php

public $belongsTo = array(
    "User"=>array(
        'counterCache'=>true

        ));

et au niveau de User.php

public $hasMany = array(
        'Post' => array(
            'className' => 'Post',
            'foreignKey' => 'user_id',
            'conditions' => array('Post.duffise' => '1'),
            'order' => 'Post.created DESC',
            'limit' => '5',
            'dependent' => true
        )
    );

j'ai créé une action au niveau de UserController listev pour afficher les posts liés à une User donné,

 $this->paginate=array('User'=>array('limit'=>5,'conditions'=>array('Post.duffise'=>1 )));

        $uv['articles']=$this->paginate('User');
        $this->set($uv);

mais au niveau de la vue listev.ctp on m'affiche erreur des index
Notice (8): Undefined index: Post [APP\View\Users\listerv.ctp, line 7].

Comment je peux afficher la liste des posts liés à l'utilisateur qui va appeler l'actionj listev?
Merci à l'avance

4 réponses


Bonsoir.
Montres nous pour commencer, le code concerné dans la vue listev.
Et puis, comment veux-tu avoir les données de la table associée si tu ne le définies pas dans ta pagination ?
À moins que tu ne contrôles pas les associations dans tes requêtes SQL.
Pour terminer, penses à faire des debug sur les données récupérées par les requêtes pour vérifier ce que tu récupères exactement comme données et la structure de celles-ci (à moins que tu utilises le plugin DebugKit et que tu aies déjà fait ses vérifications).

Merci Lartak,
j'ai pu reglé le problème, en declarant l'action au sein du PostsController au lieu de UsersController et en passant comme paramètre à l'action listerv($id) l'id de l'user, mais mon problème maintenant se reside à la pagination, comment puis je passer le paramètre à la pagination?

ligne 151        public function listerv($id){     
 152                  $this->paginate=array('Post'=>array('limit'=>5,'conditions'=>array('Post.duffise'=>1,'user_id' => $id)));        
                            $d['articles']=$this->paginate('Post');
                            $this->set($d);        
                              }

et au niveau de la vue listerv.ctp

<div class="divpag"><?php echo $this->paginator->numbers() ; ?> </div>

mais lorsque je clique sur la page 2 par exemple, j'obtiens comme erreur :

Warning (2): Missing argument 1 for PostsController::listerv() [APP\Controller\PostsController.php, line 151]
Notice (8): Undefined variable: id [APP\Controller\PostsController.php, line 152]

Bonsoir,

À première vue ton problème est dû à la récursivité quand tu vas "find", donc la question qui se pose c'est est-ce-que tu as défini une récursivité dans AppModel ou une classe fille et quelque part ? sinon essaie de faire comme sur le doc ça marche nikel c'est de use le Contain dans ton paginate voilà tout mais normalement sans Contain la jointure devrait se faire par défaut sur cake sauf si la méthode repère qu'une récursivité a été définie quelque part.

Cdt

comment puis je passer le paramètre à la pagination?

Il te suffit d'utiliser la méthode options du helper Paginator, voir PaginatorHelper » Modification des options que le Helper Paginator utilise.
Par contre, penses bien à utiliser la méthode options avant les autres méthodes du helper, comme par exemple tout en haut de ta vue.
Sinon, la répercussion ne sera pas effectuée sur les autres méthodes du helper.