2009-09-30 7 views
0

Привет,сдерживаемый на hasMany отношения

Я пытаюсь снести запрос, возвращенный из поиска, используя сдерживаемый в CakePHP.

например у меня есть 2 модели, пользователь и сообщение. Пользователь hasMany Post.

Теперь, когда я использую Containable на поиск называют так:

$User->id = 1; 
$User->find('first', array(
    'fields' => array('id'), 
    'contain' => array('Post') 
)) 

Это не вернет соответствующий пост, а не просто возвращает идентификатор пользователя.

Он работает, однако, если я пытаюсь получить данные по-другому. то есть это работает:

$Post->find('first', array(
     'fields' => array('id', 'user_id'), 
     'conditions' => array('Post.user_id' => 1), 
     'contain' => array('User') 
    )) 

это не делает:

$Post->find('first', array(
     'fields' => array('id'), 
     'conditions' => array('Post.user_id' => 1), 
     'contain' => array('User') 
    )) 

Из возвращаемых значений я тогда предположить, что для Containable для работ, ForeignKey должен быть в поле.

Как тогда я смогу отфильтровать поля пользователя при первом вызове, поскольку ассоциация пользователя хранится в Post.user_id?

Любая помощь очень ценится! Благодаря.

-aw

+0

ли сообщение belongTo пользователя? Возможно, вам нужно определить отношения в обоих направлениях, чтобы все работало. –

+0

@deceze Я пробовал установить рекурсивный на 9999 (знаю, что 2 достаточно, но юмор меня). Но это не дает мне связанную запись, она работает, если я не ставил там спецификацию полей. i. e find ('all', array ('содержать' => 'Post')). , но мне нужно отфильтровать поля пользователя. –

+0

Можете ли вы опубликовать код, демонстрирующий, как вы определили массив $ hasMany модели User? –

ответ

1

Как larryb82 сказал, что вы должны будете определить отношения в обоих направлениях, чтобы извлечь данные из сообщений модели пользователя

Пользователь имеет много сообщений. Запись принадлежит к пользователю

CakePHP Doc example