Salut !

J'ai encore un petit problème pour comprendre le fonctionnement de cakephp.
Dans mon appli j'utilise 3 modèles reliés entre eux de cette façon :

User hasMany Category
Category hasMany Feed

J'aimerais avoir accès aux "Feed" depuis le modèle "User". La jointure ne se fait pas automatiquement de manière récursive.

Quelqu'un peut il m'aider ?
Merci d'avance,

3 réponses


Tu utilise le comportement containable ?

euh... non je l'utilise de cette manière dans le controller :

Controller/UserController.php

$user_id = $this->Auth->user('id');
$this->User->id = $user_id;
$user = $this->User->read();

Voici les jointures dans mes modèles :

Model/User.php

class User extends AppModel {
    public $hasMany = array(
        'Category' => array(
            'order' => 'Category.id DESC',
            'dependent' => true,
        )
    );

}

Model/Category.php

class Category extends AppModel{
    public $hasMany = array(
        'Feed' => array(
            'dependent' => true
        )
    );

    public $belongsTo = array('User');

}

Model/Feed.php

class Feed extends AppModel {
    public $validate = array(
        'url' => array(
            array(
                'rule' => array('url', true),
                'message' => "Lien incorrect"
            )
        )
    );
    public $belongsTo = array(
        'Category' => array(),
        'User' => array('foreignKey' => false, 'conditions' => array('Category.user_id = User.id'))
    );
}

Avec le composant containable et la manipulation suivante cela fonctionne:

$this->User->contain('Category.Feed');
$this->User->id = $user_id;
debug($this->User->read());

Est-ce la bonne pratique ?