我有一个查询,但没有为此找到正确的解决方案:
$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查询和查询范围,但我认为这不是解决问题的方法。有人可以帮忙吗?
答案 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}}