2015-05-15 5 views
2

Снова хочу задать вам вопрос о CakePHP: у меня есть 2 пользователя и комментарий модели с соотношением 1-n (у одного пользователя много комментариев). Я хочу использовать находку(), чтобы перечислить детали как пользователь и это комментарии с возвращением данных в формате:CakePHP - Найти hasMany ассоциации без hasMany отношение в модели?

Array 
(
    [User] => Array 
     (
      [id] => 121 
      [name] => Gwoo the Kungwoo 
      [created] => 2007-05-01 10:31:01 
     ) 
    [Comment] => Array 
     (
      [0] => Array 
       (
        [id] => 123 
        [user_id] => 121 
        [title] => On Gwoo the Kungwoo 
        [body] => The Kungwooness is not so Gwooish 
        [created] => 2006-05-01 10:31:01 
       ) 
      [1] => Array 
       (
        [id] => 124 
        [user_id] => 121 
        [title] => More on Gwoo 
        [body] => But what of the 'Nut? 
        [created] => 2006-05-01 10:41:01 
       ) 
     ) 
) 

Но я не хочу конфиг отношения hasMany в модели пользователя, как, например, в ссылке: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html. Я попробовал этот код:

$data = $this->User->find('all', array(
       'joins' => array(
        array(
         'table' => 'comment', 
         'alias' => 'Comment', 
         'type' => 'LEFT', 
         'conditions' => array(
          'User.id = Comment.user_id' 
         ) 
        ), 
        'conditions' => array(
         'User.id' => $userId 
        ), 
        'fields' => array('User.*', 'Comment.*') 
      )); 

И Cake возвращает массив с дублированием записью пользователя (Ex: если пользователь имеет 2 комментариев, он возвращает 2 записи пользователя дубликата).

Любой может дать мне другое решение для этого? (но кроме решения, которое имеет конфигурацию hasMany model), спасибо.

+0

Пожалуйста, проверьте это: - http: // stackoverflo w.com/questions/10344315/find-conditions-with-hasmany-model –

+0

Какова ваша причина не определять отношения hasMany, когда это то, что вы получили? – drmonkeyninja

ответ

1

В качестве альтернативы вы можете использовать bindModel в контроллере

 $this->User->bindModel(
       array(
       'hasMany'=>array(
        'Comment' =>array(
         'className' => 'Comment', 
         'foreignKey' => 'user_id', 
         'conditions' => array('Comment.status' => 'Active'), 
       )   
       ) 
      ) 
     ); 

     $data = $this->User->find('all',array('conditions'=>array('User.email'=>$userEmail))); 

Для более info

Обновлено

Посмотрите на эту answer некоторую информацию, просмотреть информацию о безвыходном и UNBIND модели через это link

+0

Спасибо большое! Вы сохранили мое время :) – user3209287

+0

Но если я использую bindModel(), могу ли я использовать unbindModel() для удаления ассоциаций? – user3209287

+0

Да, если вы не хотите ненужных данных. –

Смежные вопросы