2012-01-11 28 views
0

我有以下型號:CakePHP:使用bindModel向後追溯3個模型?

-> = 1:很多,<-> =很多:很多

用戶<->產品->將MessageList<->消息

我與這個目標查詢是查找所有消息 cor迴應登錄。我也過濾掉已經閱讀的郵件(我在先前的發現中找到郵件ID並將它們存儲在$messageIdsReadByPerson中)。

這裏是我的嘗試:

 // only grab messages belonging to this user 
     $this->Message->unbindModel(array('hasAndBelongsToMany'=>array('MessageListsMessage'))); 

     $this->Message->bindModel(array(
      'hasOne' => array(
       'MessageListsMessage' => array(
        'className' => 'MessageListsMessage', 
        'foreignKey' => false, 
        'type' => 'INNER', 
        'conditions' => array(
         'MessageListsMessage.message_id = Message.id' 
        ) 
       ), 
       'MessageList' => array(
        'className' => 'MessageList', 
        'foreignKey' => false, 
        'type' => 'INNER', 
        'conditions' => array(
         'MessageList.id = MessageListsMessage.message_list_id' 
        ) 
       ), 
       'Product' => array(
        'className' => 'Product', 
        'foreignKey' => false, 
        'type' => 'INNER', 
        'conditions' => array(
         'Product.id = MessageList.product_id' 
        ) 
       ), 
       'ProductsUser' => array(
        'className' => 'ProductsUser', 
        'foreignKey' => false, 
        'type' => 'INNER', 
        'conditions' => array(
         'ProductsUser.product_id = Product.id' 
        ) 
       ), 
       'User' => array(
        'className' => 'User', 
        'foreignKey' => false, 
        'conditions' => array(
         'User.id = ProductsUser.user_id', 
         'User.id' => $this->Auth->user('id') 
        ) 
       ) 
      ) 
     )); 
     $messages = $this->Message->find('all', array(
      'recursive' => -1 
     )); 
     $this->set('messages', $messages); 

但是,只有給這個查詢:

SELECT `Message`.`id`, `Message`.`text`, `Message`.`url` FROM `messages` AS `Message` WHERE 1 = 1 

怎麼可以這樣使用bindModel得當(或一些更簡單的方法,我是不知道的,雖然joins顯然不是要走的路)。

編輯: 這並不工作之一:

function index() { 
    // only grab messages belonging to this user 
    $messages = $this->Message->find('all', array(
     'contain' => array(
      'MessageList' => array(
       'Product' => array(
        'User.id = ' . $this->Auth->user('id') 
       ) 
      ) 
     ) 
    )); 
    $this->set('messages', $messages); 
} 

回答