我正在尝试在分类列表中找到用户的杂货。关联是Category hasMany Item hasMany User through Grocery。我正在使用可包含行为,并没有过滤掉所有其他Grocery。它基本上返回每个项目。
我的控制器功能:
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
我不想返回任何没有Grocery(ItemUser)的Item数组。
这有效,但现在它只能展示。我需要它来显示该嵌套数组中的一个类别的所有项目。
它显示:
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]...
甚至不需要Grocery数组,只需通过它们搜索标准。
答案 0 :(得分:6)
您无法根据Contain中的条件限制主要模型的结果。当您使用contain()
时,它实际上会创建多个查询 - 这使您无法根据所包含的条件进行限制。
要解决此问题,您需要使用JOIN [ see CakePHP Joining Tables ]而不是包含。
答案 1 :(得分:0)
如果你想要嵌套格式,你可以将所有这些移动到另一个(例如Groceries)控制器,这将允许你通过user_id限制或(但我不得不承认我不确定这是否是好蛋糕练习,虽然我已经成功地使用了这种方法......无论如何,在1.3中的某些方面:
$groceries = $this->Category->Item->Grocery->find('all', array(
'conditions' => array(
Grocery.user_id =' => $this->Auth->user('id')
)
));