Chr*_*ris 3 cakephp containable
我正试图在分类列表中找到用户的杂货.关联是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')
)
)
)
)
));
Run Code Online (Sandbox Code Playgroud)
返回的数组:
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
Run Code Online (Sandbox Code Playgroud)
我不想返回任何没有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]...
Run Code Online (Sandbox Code Playgroud)
我需要它:
Array
(
[0] => Array
(
[Category] => Array
(...
[Item] => Array
(...)
[Item] => Array
(...)
)
)
[1] => Array
(
[Category] => Array
(...)
[Item] => Array
(...)
)
[2]...
Run Code Online (Sandbox Code Playgroud)
甚至不需要Grocery数组,只需通过它们搜索标准.
您无法根据Contain中的条件限制主模型的结果.当您使用时contain(),它实际上会创建多个查询 - 这使您无法根据所包含的条件进行限制.
要解决此问题,您需要使用JOIN [请参阅CakePHP连接表]而不是包含.