我有一个产品表,其中每个产品都有很多订单,product.php
public function orders()
{
return $this->hasMany(Order::class,'product_id');
}
我可以使用以下代码获取按order_count订购的产品:
$products = Product::withCount('orders')->orderBy('orders_count', 'desc')->get();
现在我想在控制器中获得订单数大于5的产品 我该怎么办?
答案 0 :(得分:3)
执行此操作的一种方法是使用whereHas():
$products = Product::withCount('orders')
->whereHas('orders', null, '>', 5)
->orderBy('orders_count', 'desc')
->get();
我认为文档中没有提到它,但是您不必通过闭包作为第二个参数,并且可以使用第3个和第4个参数来传递运算符和计数。
或者,您可以改用having():
$products = Product::withCount('orders')
->having('orders_count', '>', 5)
->orderBy('orders_count', 'desc')
->get();
答案 1 :(得分:0)
下面的代码应该只为您提供数量大于5的订单
$products = Product::withCount('orders')->where('orders_count', '>', 5)->orderBy('orders_count', 'desc')->get();
添加->where()
应该可以。
希望有帮助。
更新
尝试
->whereRaw('count("orders.id") > 5')
这应该可以使订单数量超过5个。
答案 2 :(得分:0)
您可以在集合上使用映射来过滤出记录,例如:`
$collection = collect($products)->map(function ($product) {
return $product->orders->count() > 5;
})
->reject(function ($name) {
return $product->orders->count() < 5;
});`
这只是一个示例,您可以根据需要添加更多条件。 希望这会有所帮助。