CakePHP - Как получить глубоко связанные данные? - PullRequest
1 голос
/ 23 марта 2012

У меня есть следующие модели:

Пользователь:

  • hasOne Профиль, Страница
  • hasMany Комментарий

Комментарий:

  • принадлежит пользователю, странице, профилю

Страница:

  • принадлежит пользователю
  • имеет много комментариев

Профиль:

  • принадлежит пользователю

КогдаЯ извлекаю страницу, хочу получить связанные комментарии, и для каждого комментария я хочу свой профиль.

В моей таблице комментариев есть поля page_id и user_id.В моей таблице профиля есть user_id.

Итак, я предполагаю, что мне нужно сделать что-то вроде

Comment belongsTo 
'Profile' => array(
        'conditions' => array('Profile.user_id' => 'Comment.user_id')
    )

, но это не работает - он возвращает пустую запись профиля.

Можеткто-нибудь поможет?Я хожу по кругу!(используя CakePHP 2.0)

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Используйте CakePHP's Контейнерное поведение [ссылка] . По сути, это позволяет вам выбирать, какие связанные модели вы хотите включить в свою находку.

Вы также можете указать, какие поля (поля) вы хотите для каждой модели, указать условия для каждой ... и т.д.

Это должно выглядеть примерно так:

//PageModel

public $actsAs = array('Containable');

public function getPage($id=null) {
    $this->recursive = -1;  //often set to -1 in the AppModel to make -1 the default
    $this->find('all', array(
        'conditions' => array(
            'Page.id' => $id
        ),
        'contain' => array(
            'Comment' => array(
                'User' => array(
                    'Profile',
                ),
            ),
        )
    ));

}
1 голос
/ 23 марта 2012

Если отношения объявлены правильно, все данные, которые вам нужны, могут быть получены путем поиска нужной страницы. Но чтобы ограничить количество возвращаемых данных, вам, вероятно, придется использовать ContainableBehavior.

PageModel:

var $actsAs = array('Containable');

PagesController:

function view($id)
{
    $this->Page->contain(array('Comment' => array('User', 'Profile')));
    $page = $this->Page->find('first', array('conditions' => array('Page.id' => $id)));
}

EDIT

Шарон, по твоему вопросу кажется, что комментарии связаны с пользователями и профилями. Но если «Профиль» означает «профиль пользователя», связи между Комментарием и Пользователем достаточно, и содержимое должно быть:

$this->Page->contain(array('Comment' => array('User' => array('Profile'))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...