Orders实现与Items的HasManyThrough关系。我想将Orders集合过滤为仅包含零项的订单。我尝试过:
$orders->where('items', '!=', []);
这当然是行不通的,因为只能对具体值进行离散比较(相等,不相等,小于/大于等)。没有“ isEmpty”属性。像whereCallback
之类的东西会很棒。
最简单的方法是什么?相同的$orders
集合已在同一请求中以多种方式使用,所以我宁愿不进行另一次数据库往返。
答案 0 :(得分:1)
如果在从数据库中获取items_count
集合时将orders
包含到$orders = Order::withCount('items')->restOfTheQuery()->get();
中,将会更加容易。
items_count
这将为order
集合中的每个$orders
对象添加另一个名为orders
的属性
然后,当您只想要没有items
的{{1}}
// using collections where function
$orderWithoutItems = $orders->where('items_count', 0);
答案 1 :(得分:0)
我认为filter()
有点像您正在寻找的whereCallback
。
$ordersWithoutItems = $orders->filter(function($order) {
return $order->items()->doesntExist();
});