2012-01-23 59 views
0

我使用CakePHP創建消息傳遞系統。在車型方面,CakePHP - 使用「包含」查找中包含的不需要的HABTM

Users HABTM Conversations 
Conversations hasMany Messages 
Messages belongTo User (the sender) 

所以我上運行一個用戶找到狀態,並且包含如下:

$user = $this->Conversation->User->find('first', array(
     'conditions' => array('User.id' => $user_id), 
     'contain' => array(
      'Conversation' => array(
       'ConversationsUser', 
       'Message' => array(
        'order' => 'Message.created DESC', 
        'limit' => 1, 
        'User' => array(
         'Student' => array(
          'University' 
         ), 
         'Recruiter' => array(
          'Org' 
         ) 
        ) 
       ) 
      ) 
     ) 
    )); 

當我得到的結果,我得到$用戶[「會話''['Message'] ['User'] ['會話'] - 基本上,HABTM連接會自動完成3級,而且我無法阻止它。有沒有辦法讓我從查找中刪除這些信息?

+0

你在哪裏設置了可容忍的行爲?如果您沒有在AppModel中設置(或單獨在_each_模型中),我可以想象,如果您包含的模型不使用Containable行爲,那麼該模型將根據其「遞歸」設置獲取相關數據。 (這是猜測,這就是爲什麼我沒有把它寫成答案) – Joep

回答

0

已解決。我通過重新調整搜索結果:

$this->Conversation->bindModel(array('hasOne' => array('ConversationsUser'))); 
$conversations = $this->Conversation->find('all', array(
     'conditions' => array('ConversationsUser.user_id' => $user_id), 
     'order' => 'Conversation.modified DESC', 
     'contain' => array(
      'ConversationsUser', 
      'User' => array(
       'conditions' => array('User.id <> ' . $user_id), 
       'ProfilePhoto' => array(
        'Attachment' 
       ), 
       'Student' => array(
        'University' 
       ), 
       'Recruiter' => array(
        'Org' 
       ) 
      ), 
      'Message' => array(
       'order' => 'Message.created DESC' 
      ) 
     ) 
    )); 

我真的不需要在消息中包含用戶。