2013-03-24 39 views
1

我有兩個表格設置爲使用樹行爲,製造商和類別。CakePHP,如何在給定父類別時找到與子類別相關的所有產品?

產品只能屬於一個類別,只有一個製造商,但一些製造商(孩子)是由其他廠家(父母)所擁有,同樣某些類別(孩子)是另一個(父)的子類別。

我要做到以下幾點:

給出一個類別ID(父),發現在給定的製造商ID(父)子類別 所有產品,找到孩子製造商的所有產品

我曾嘗試以下內容(產品控制器):

$conditions['Product.category_id'] = $this->Product->Category->children($id,false,'id'); 
$this->paginate = array(
      'conditions' => $conditions, 
      'limit' => 21 
     ); 
$products = $this->paginate('Product'); 
$this->set(compact('products'));  

,但它給了我這樣的:

WHERE `Product`.`category_id` IN (Array, Array, Array, Array, Array, Array) 

如果我做了一個print_r,我可以看到它抓取了我需要的信息(見下面),但是我怎麼才能做到這一點,是否有更好的方法來做到這一點?

Array 
(
[Product.category_id] => Array 
    (
     [0] => Array 
      (
       [Category] => Array 
        (
         [id] => 11 
        ) 

      ) 

     [1] => Array 
      (
       [Category] => Array 
        (
         [id] => 12 
        ) 

      ) 

     [2] => Array 
      (
       [Category] => Array 
        (
         [id] => 23 
        ) 

      ) 

     [3] => Array 
      (
       [Category] => Array 
        (
         [id] => 24 
        ) 

      ) 

     [4] => Array 
      (
       [Category] => Array 
        (
         [id] => 25 
        ) 

      ) 

     [5] => Array 
      (
       [Category] => Array 
        (
         [id] => 26 
        ) 

      ) 

    ) 

) 

回答

3

查詢失敗,因爲它預計含有類別-ID的數組,像這樣:

$conditions['Product.category_id'] = array(1,4,5,6); 

您可以通過「提取」從你的陣列這些值利用實現這一Hash::extract()(或Set::extract()如果你使用CakePHP 1.3)

$categoryIds = $this->Product->Category->children($id,false,'id'); 

$conditions['Product.category_id'] = Hash::extract($categoryIds, '{n}.Category.id); 

閱讀DO cumentation在這裏的哈希實用程序:

http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::extract

+0

感謝thaJeztah,這絕對是我所期待的。在獲得與兒童類別相關的產品時,這是否是最佳做法?或者,還有更好的方法?我有一種感覺,我會經常使用它,並且希望確保我以正確的方式進行操作。 – CertifiedGeek 2013-03-25 19:14:13

+0

我認爲這是一個不錯的方法。爲了使其更加可重用,最好在模型上創建一個方法,例如'產品:: findProductsInCategory($的categoryId)'。爲了提高性能,緩存總是一個選項,但是從在數據庫中創建正確的索引開始。 – thaJeztah 2013-03-25 19:20:26

+0

是有道理的,謝謝你,我感謝你的幫助! – CertifiedGeek 2013-03-25 19:59:49

相關問題