2012-10-31 60 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