2012-01-11 43 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); 
} 

回答