cakephp 3匹配不工作

cakephp 3 matching not working

我有 categoriesproductsseller_products table 并且想 select 全部来自三个 table 按类别分组seller_products.stock > 0seller_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);