CakePHP:查询两次打印相同的值

时间:2016-08-17 10:39:26

标签: cakephp cakephp-3.2

我正在开发CakePHP 3.2。

我有categoriesproductsseller_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

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');

另见