2012-10-31 62 views
2

我有如下因素协会CakePHP中包含关联条件问题

后>主体 - >二次

$results = $this->Post->find('all', array(
    'conditions' => array(
     'Post.post_id =' => 2, 
     'Primary.secondary_id !=' => null 
    ), 
    'contain' => array(
     'Primary' => array(
      'Secondary' => array(
       'conditions' => array('Secondary.short_code =' => 'code') 
      ) 
     ) 
    ) 
)); 

返回此。

Array 
(
    [0] => Array 
     (
      [Post] => Array 
       (
        [id] => 2 
        [created] => 2012-10-29 09:48:29 
        [modified] => 2012-10-29 09:48:29 
       ) 

      [Primary] => Array 
       (
        [id] => 3 
        [secondary_id] => 6 
        [Secondary] => Array 
         (
          [id] => 6 
          [short_code] => code 
          [created] => 2012-10-31 11:19:56 
          [modified] => 2012-10-31 11:20:03 
         ) 

       ) 

     ) 

但是当我改变

'conditions' => array('Secondary.short_code =' => 'code') 

'conditions' => array('Secondary.short_code !=' => 'code') 

它仍然返回一次记录,当我不希望它。

Array 
(
    [0] => Array 
     (
      [Post] => Array 
       (
        [id] => 2 
        [created] => 2012-10-29 09:48:29 
        [modified] => 2012-10-29 09:48:29 
       ) 

      [Primary] => Array 
       (
        [id] => 3 
        [secondary_id] => 6 
        [Secondary] => Array 
         (
         ) 

       ) 

     ) 
+0

你究竟想要完成什么? – bbb

+0

我想限制结果返回。不要cakephp容易的行为做到这一点? http://book.cakephp.org/1.3/view/1323/Containable – madphp

+1

然后检查Dave的答案。一旦查询被执行,Containable可作为限制/格式化结果数组的便利工具。您正在查询应用于查询执行的限制/连接。 – bbb

回答

5

很难知道你希望达到什么,但我认为这听起来像你试图基于对“次要”模型的条件限制“主”的结果。

如果是这样,您将需要使用joins()而不是contain()

原因:当您使用CakePHP's Containable Behavior时,它实际上会执行单独的查询,然后在将数据返回给您之前合并结果。以这种方式进行这种方式在很多方面都很棒,但它不允许您根据针对其孩子的条件来限制家长的结果。

要做到这一点,只需使用joins()即可。 (创建MySQL JOIN的CakePHP语法)

+0

哦,好的。我会尝试。 – madphp