cakephp 3匹配不工作
cakephp 3 matching not working
我有 categories
、products
和 seller_products
table 并且想 select 全部来自三个 table 按类别分组seller_products.stock > 0
和 seller_products.status = 1
这是我的代码
$pros1 = $this->Products->Categories->find()
->where([
])
->select(['Categories.id', 'Categories.title'])
->distinct(['Categories.id'])
->contain(['Products'])
->matching('Products.SellerProducts', function(\Cake\ORM\Query $q) {
return $q->where(['SellerProducts.stock >' => 0, 'SellerProducts.status' => 1]);
});
但这不起作用。我通过匹配将所有产品按类别分组但不起作用,但仍然得到库存为 0 或状态不为 1 的产品
他们的协会是
$categories->hasMany('Products');
$products->hasMany('SellerProducts');
您需要了解 contain()
和 matching()
是不同的。您要求的类别具有有库存的产品。但是如果你想要匹配的是什么产品,你还需要在contain()
中过滤它们:
$matcher = function(\Cake\ORM\Query $q) {
return $q->where(['SellerProducts.stock >' => 0, 'SellerProducts.status' => 1]);
};
$pros1 = $this->Products->Categories->find()
->select(['Categories.id', 'Categories.title'])
->distinct(['Categories.id'])
->contain(['Products' => function ($q) use ($matcher) {
return $q->matching('SellerProducts', $matcher);
}])
->matching('Products.SellerProducts', $matcher);
我有 categories
、products
和 seller_products
table 并且想 select 全部来自三个 table 按类别分组seller_products.stock > 0
和 seller_products.status = 1
这是我的代码
$pros1 = $this->Products->Categories->find()
->where([
])
->select(['Categories.id', 'Categories.title'])
->distinct(['Categories.id'])
->contain(['Products'])
->matching('Products.SellerProducts', function(\Cake\ORM\Query $q) {
return $q->where(['SellerProducts.stock >' => 0, 'SellerProducts.status' => 1]);
});
但这不起作用。我通过匹配将所有产品按类别分组但不起作用,但仍然得到库存为 0 或状态不为 1 的产品
他们的协会是
$categories->hasMany('Products');
$products->hasMany('SellerProducts');
您需要了解 contain()
和 matching()
是不同的。您要求的类别具有有库存的产品。但是如果你想要匹配的是什么产品,你还需要在contain()
中过滤它们:
$matcher = function(\Cake\ORM\Query $q) {
return $q->where(['SellerProducts.stock >' => 0, 'SellerProducts.status' => 1]);
};
$pros1 = $this->Products->Categories->find()
->select(['Categories.id', 'Categories.title'])
->distinct(['Categories.id'])
->contain(['Products' => function ($q) use ($matcher) {
return $q->matching('SellerProducts', $matcher);
}])
->matching('Products.SellerProducts', $matcher);