CakePHP,如果给出父类别,我如何找到与子类别相关的所有产品?

时间:2013-03-24 14:03:26

标签: cakephp tree parent-child

我有两个表可以设置为使用树行为,制造商和类别。

产品只能属于一个类别,只能属于一个制造商,但有些制造商(子)属于其他制造商(父母),同样一些类别(子)是另一个(父母)的子类别。

我想做以下事情:

给定类别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
                    )

            )

    )

)

1 个答案:

答案 0 :(得分:3)

查询失败,因为它需要一个只包含 类别ID的数组,如下所示:

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

您可以通过使用Hash::extract()从数组中“提取”这些值来实现此目的(如果您使用CakePHP 1.3,则为Set::extract()

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

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

在此处阅读哈希实用程序的文档:

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