一对多查询,其中包含返回不需要的结果

时间:2015-01-08 19:17:19

标签: mysql laravel

我有一个查询,但没有为此找到正确的解决方案:

    $orders = Shipping::with('orderitems')
        ->whereHas('orderitems',  function($query)  {
            $query->where('status','=',NULL);
        })
        ->paginate(10);

我正在查询一对多的关系

public function orderitems() {
    return $this->hasMany('OrderItems');
}

当'orderItems'中的所有条目都符合条件时,上面的查询返回正确的结果集,状态为'NULL'。问题是,当我有一个包含2个项目的订单而且这两个项目中的一个没有状态'NULL'时,两个项都会返回,但我只想要返回实际状态为'NULL'的项目。

我已经尝试过使用whereNested查询和查询范围,但我认为这不是解决问题的方法。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

whereHas实际上会根据Shipping是否至少有一个符合条件的orderitem来过滤with。我非常确定你想要的是使用$orders = Shipping::with(['orderitems' => function($query){ $query->where('status','=',NULL); }])->paginate(10); 条件:

whereHas

修改

如果您只想要订购至少一件状态为NULL的商品,请添加$orders = Shipping::with(['orderitems' => function($query){ $query->where('status','=',NULL); }])->whereHas('orderitems', function($query){ $query->where('status','=',NULL); })->paginate(10);

{{1}}