我希望只有在第二级关联数据符合给定条件时才能关联。
查询可能更好地解释我尝试做的事情。
$selSite = $this->Sites->get($selSiteId, [
'contain' => [
'Agplans.Products' => function ($q) {
return $q
->where([
'Products.type' => 'hosting',
]);
}
]
]);
所以,只有当相关产品符合条件时,我才会期待agplan
。
但结果是:
'agplans' => [
(int) 0 => object(App\Model\Entity\Agplan) {
'id' => (int) 20,
'product_id' => (int) 4,
'product' => null,
...,
},
(int) 1 => object(App\Model\Entity\Agplan) {
'id' => (int) 21,
'site_id' => (int) 64,
'product_id' => (int) 75,
'product' => object(App\Model\Entity\Product) {
'id' => (int) 75,
...,
},
...,
}
],
我的问题是让agplan[0]
获得product => null
。
这不是我从doc中理解的。
如何仅使用agplan
获取'product' => object(App\Model\Entity\Product)
?
答案 0 :(得分:1)
所以感谢@ndm指出的我理解我必须像这样构建我的查询:
$selSite = $this->Sites->get($selSiteId, [
'contain' => [
'Agplans.Products',
'Agplans' => function ($q) {
return $q
->matching('Products', function ($q) {
return $q
->where([
'type' => 'hosting',
]);
});
}
]
]);
这样,我只会agplans
匹配给定的product
。
无论如何,我发现CakePHP文档没有明确关于限制关联的包含功能。