一对多查询 where 有 returns 不需要的结果
one to many query with where Has returns unwanted results
我有一个问题,但没有找到正确的解决方案:
$orders = Shipping::with('orderitems')
->whereHas('orderitems', function($query) {
$query->where('status','=',NULL);
})
->paginate(10);
我正在查询一对多关系
public function orderitems() {
return $this->hasMany('OrderItems');
}
当 'orderItems' 中的所有条目都符合条件且状态为 'NULL' 时,上面的查询 returns 是正确的结果集。问题是,当我有一个包含 2 个项目的订单并且两个项目中的一个没有状态 'NULL' 时,两个项目都被退回,尽管我只想要实际具有状态 'NULL' 的项目被退回.
我试过使用 whereNested 查询和查询范围,但我认为这不是解决问题的方法。有人可以帮忙吗?
whereHas
实际上会根据是否有至少一个 orderitem
符合条件来过滤 Shipping
。我很确定你想要的是使用 with
条件:
$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);
我有一个问题,但没有找到正确的解决方案:
$orders = Shipping::with('orderitems')
->whereHas('orderitems', function($query) {
$query->where('status','=',NULL);
})
->paginate(10);
我正在查询一对多关系
public function orderitems() {
return $this->hasMany('OrderItems');
}
当 'orderItems' 中的所有条目都符合条件且状态为 'NULL' 时,上面的查询 returns 是正确的结果集。问题是,当我有一个包含 2 个项目的订单并且两个项目中的一个没有状态 'NULL' 时,两个项目都被退回,尽管我只想要实际具有状态 'NULL' 的项目被退回.
我试过使用 whereNested 查询和查询范围,但我认为这不是解决问题的方法。有人可以帮忙吗?
whereHas
实际上会根据是否有至少一个 orderitem
符合条件来过滤 Shipping
。我很确定你想要的是使用 with
条件:
$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);