J'explique mon problème : J'ai 3 tables : courses, chapters et posts.** J'ai crée 2 tables de liaison et les modèles qui vont avec ChapterCourse et ChapterPost** J'ai fait une relation de type HABTM entre le modele Course et le modèle Chapter** [code]// Modèle Course public $actsAs = array('containable'); public $hasAndBelongsToMany = array('Chapter',); public$hasMany =array( 'ChapterCourse' ); [/code] J'ai fait une relation de type HABTM entre le modele Chapter et le modèle Post** [code]// Modèle Chapter public $actsAs = array('containable'); public $hasAndBelongsToMany = array('Post', 'Course'); public$hasMany =array( 'ChapterCourse', 'ChapterPost' ); [/code] [code]// Modèle Post public $actsAs = array('containable'); public $hasAndBelongsToMany = array('Chapter'); public $hasMany = array( 'ChapterPost' ); [/code] Et en faisant une requête dans le CourseController pour ressortir le cours, J'aimerai avoir également dans cet array les chapitres (chapters)du cours et pour chacun des chapitres, les posts (posts) Voici ma requête en utilisant containable : [code] $this->Course->contain('Chapter'); $this->Course->Chapter->contain('Post'); $course = $this->Course->find('first', array( 'conditions' => array('Course.slug' => $slug), 'recursive' => -1, )); debug($course);die();[/code] Mon problème est que dans l'array que j'obtiens je n'ai pas du tout les Posts associés à chacun des chapters. Une idée ??? ai-je fais une erreur dans mes types d'associations entre les tables ou bien dans ma requête ? [code]array( 'Course' => array( 'id' => '1', 'name' => 'Mon cours 1', 'slug' => 'mon-cours-1', 'baseline' => '', 'type_id' => '1', 'category_id' => '9', 'level_id' => '2', 'author_id' => '2', 'created' => '0000-00-00 00:00:00' ) ), 'Chapter' => array( (int) 0 => array( 'id' => '175', 'name' => 'Introduction', 'slug' => 'introduction', 'duree' => '17', 'content' => '', 'created' => '2014-06-20', 'count' => '0', 'ChaptersCourse' => array( 'id' => '222', 'course_id' => '1', 'chapter_id' => '175', 'chapterposition' => '0' ) ), (int) 1 => array( 'id' => '176', 'name' => 'chapitre test', 'slug' => 'chapitre-test', 'duree' => '0', 'content' => '', 'created' => '2014-06-20', 'count' => '0', 'ChaptersCourse' => array( 'id' => '223', 'course_id' => '1', 'chapter_id' => '176', 'chapterposition' => '1' ) ) ) )[/code] Merci d'avance de vos éclairages sur le pourquoi je ne parviens pas à obtenir dans cet array les posts associés à chacun des chapters ???

2 réponses


ker0x
Réponse acceptée

Essaye de cette façon :

$course = $this->Course->find('first', array(
    'conditions' => array('Course.slug' => $slug),
    'contain' => array(
        'Chapter' => array(
            'Post'
        )
    ),
    'recursive' => -1,          
));
JPH
Auteur

EXCELLENT !!! D'une logique IMPLACABLE mais je m'emmêle pafois les crayons dans les tableaux d'option. Ca fonctionne parfaitement pour aller chercher mes Posts qui sont au 2eme niveau.
MERCI BEAUCOUP GyZmO !!!! :) J'ai bien galéré et grace à toi me voilà débloqué !

Super réponse. A mon avis on est plus d'un à galérer pour aller chercher les données en profondeurs.

Cette réponse est d'une grande utilité. Thanks.