1

我有两个表被设置为使用树行为、制造商和类别。

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

我想做以下事情:

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

            )

    )

)
4

1 回答 1

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);

在此处阅读有关 Hash Utility 的文档:

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

于 2013-03-24T19:48:36.343 回答