我正在开发CakePHP 3.2。
我有categories
,products
,seller_products
表格及其关联
categories->hasMany('Products');
seller_products->hasMany('Products');
我必须按类别检索所有产品,其中seller_products.stock> 0
这就是我正在做的事情
$pros1 = $this->Products->Categories->find()
->where([
'Categories.status' => 0,
])
->contain([
'Products.SellerProducts', 'Subcategories', 'Subcategories.ProductTypes'
])
->matching('Products.SellerProducts', function(\Cake\ORM\Query $q) {
return $q->where(['SellerProducts.stock >' => 0]);
});
但是在调试时,它返回两次相同的值。
foreach($pros1 as $p){debug($p);}
两次打印相同的值
/src/Controller/PagesController.php (line 120)
object(App\Model\Entity\Category) {
'id' => (int) 1,
'title' => 'Electronics',
'description' => '',
'icon' => 'fa-television',
'status' => (int) 0,
'created' => object(Cake\I18n\Time) {
.........
}
/src/Controller/PagesController.php (line 120)
object(App\Model\Entity\Category) {
'id' => (int) 1,
'title' => 'Electronics',
'description' => '',
'icon' => 'fa-television',
'status' => (int) 0,
'created' => object(Cake\I18n\Time) {
.........
}
和debug(count($pros1))
打印1
答案 0 :(得分:1)
来自文档的引用:
由于此功能会创建
INNER JOIN
,您可能需要考虑 在查询查询上调用distinct
,因为您可能会获得重复行 您的条件不会将它们排除在外。可能是这种情况, 例如,当同一个用户在一个用户上多次评论时 制品
<强> Cookbook > Database Access & ORM > Query Builder > Filtering by Associated Data 强>
在您的情况下,有多个匹配的产品属于同一类别。因此,要么对表主键使用不同的选择,要么对其进行分组(there may be no difference between the two)。
$pros1 = $this->Products->Categories
->find()
->distinct('Categories.id')
// ...
// ...
->matching(/* ... */)
->group('Categories.id');
另见