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应该很容易。呵呵,正是我所做的!太好了,非常感谢!