我有两个表可以设置为使用树行为,制造商和类别。
产品只能属于一个类别,只能属于一个制造商,但有些制造商(子)属于其他制造商(父母),同样一些类别(子)是另一个(父母)的子类别。
我想做以下事情:
给定类别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
)
)
)
)
答案 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