Mysql where Has的一对多查询返回不需要的结果
我有一个问题,没有找到正确的解决方案:Mysql where Has的一对多查询返回不需要的结果,mysql,laravel,Mysql,Laravel,我有一个问题,没有找到正确的解决方案: $orders = Shipping::with('orderitems') ->whereHas('orderitems', function($query) { $query->where('status','=',NULL); }) ->paginate(10); 我正在查询一对多关系 public function orderitems() {
$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查询和查询范围,但我认为这不是问题的解决方案。有人能帮忙吗?
Where has
将根据他们是否至少有一个符合条件的订单项来实际过滤发货
。我很确定您想要的是将与
一起使用,并附带一个条件:
$orders = Shipping::with(['orderitems' => function($query){
$query->where('status','=',NULL);
}])->paginate(10);
编辑
如果您还希望仅订购至少一个状态为NULL
的项目,请添加一个whereHas
:
$orders = Shipping::with(['orderitems' => function($query){
$query->where('status','=',NULL);
}])->whereHas('orderitems', function($query){
$query->where('status','=',NULL);
})->paginate(10);
这是正确的方向,谢谢!现在的问题是,如果我给项目一个状态,我会在下一个页面重新加载时得到一个未定义的变量错误,所以我需要删除查询中的订单,但使用另一个whereHas应该很容易。呵呵,正是我所做的!太好了,非常感谢!