2013-03-30 55 views
3

我正在嘗試在分類列表中查找用戶的雜貨商品。這些協會是分類hasMany Item hasMany User through Grocery。我正在使用可容忍行爲,並沒有過濾掉所有其他雜貨店。它基本上返回每個項目。CakePHP包含的條件不限制結果?

我的控制器功能:所返回

function showlist() { 
$categories = $this->Category->find('all', array(
    'contain' => array(
     'Item' => array(
      'Grocery' => array(
       'conditions' => array(
        'Grocery.user_id =' => $this->Auth->user('id') 
       ) 
      ) 
     ) 
    ) 
)); 

陣:

Array 
(
    [0] => Array 
     (
      [Category] => Array 
       (
        [id] => 10 
        [parent_id] => 
        [name] => Dairy 
        [lft] => 1 
        [rght] => 6 
       ) 

      [Item] => Array 
       (
       ) 

     ) 

[1] => Array 
    (
     [Category] => Array 
      (
       [id] => 11 
       [parent_id] => 10 
       [name] => Milk 
       [lft] => 2 
       [rght] => 3 
      ) 

     **[Item] => Array 
      (
      )** 

    ) 

[2] => Array 
    (
     [Category] => Array 
      (
       [id] => 12 
       [parent_id] => 10 
       [name] => Cheese 
       [lft] => 4 
       [rght] => 5 
      ) 

     [Item] => Array 
      (
      ) 

    ) 

[3] => Array 

我不想回到那個沒有雜貨店(ItemUser)低於他們的任何項目陣列。


這個工程,但現在它只顯示平坦。我需要它顯示該嵌套數組中的一個類別的所有項目。

它顯示:

Array 
(
[0] => Array 
    (
     [Category] => Array **<--This could be the same category as** 
      (...) 

     [Item] => Array 
      (...) 

     [Grocery] => Array 
      (...) 
    ) 
[1] => Array 
    (
     [Category] => Array **<--This** 
      (...) 

     [Item] => Array 
      (...) 

     [Grocery] => Array 
      (...) 
    ) 
[2]... 

,我需要它是:

Array 
(
[0] => Array 
    (
     [Category] => Array 
      (... 
      [Item] => Array 
      (...) 

      [Item] => Array 
      (...) 
      ) 
    ) 
[1] => Array 
    (
     [Category] => Array 
      (...) 

     [Item] => Array 
      (...) 
    ) 
[2]... 

甚至不真正需要的雜貨店陣列,就必須通他們搜索的標準。

回答

6

您無法根據Contain中的條件限制主模型的結果。當您使用contain()時,它實際上會創建多個查詢 - 這使您無法根據所包含的條件進行限制。

要解決此問題,您需要使用JOINs [ see CakePHP Joining Tables ]而不是包含。

+0

這工作,但我仍然有一些問題。我在上面的編輯中注意到了它們。 – Chris

+0

這將是另一個問題,而不是這個問題的補充。 「我的聯接以奇怪格式返回數據」或其他內容。 – Dave

+0

您是否嘗試過使用http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html重新格式化數據? –

0

如果你想嵌套格式化,你可以把所有這些移動到另一個(例如Groceries)控制器,它可以讓你通過user_id來限制或者(但是我不得不承認我不確定這是否是好的Cake實踐,雖然我已經成功地使用這種方法...在1.3無論如何)沿線的東西:

$groceries = $this->Category->Item->Grocery->find('all', array(
    'conditions' => array(
     Grocery.user_id =' => $this->Auth->user('id') 
    ) 
));