Laravel 带分页的 OrderBy 关系计数
Laravel OrderBy Relationship count with pagination
我有很多项目,每个项目都有很多订单,有的完成了,有的没有。
我想按照完成订单的数量来订购它们:
$products = $products->orderBy(function($product) {
return $product->orders->where('status', 2)->count();
})->paginate(15);
我知道订单调用不是这样工作的,但这是显示问题的最佳方法。 SortBy 不起作用,因为我想使用分页。
如果有效,试试这个:
$categories = Prodcuts::with(array('orders' => function($query) {
$query->select(DB::raw('SELECT * count(status) WHERE status = 2 as count'))
$query->orderBy('MAX(count)')
}))->paginate(15);
return View::make('products.index', compact('categories'));
注意:这个没有测试过
终于找到解决问题的好办法:
$products = $products->join('orders', function ($join) {
$join->on('orders.product_id', '=', 'products.id')
->where('orders.status', '=', 2);
})
->groupBy('products.id')
->orderBy('count', $order)
->select((['products.*', DB::raw('COUNT(orders.product_id) as count')]))->paginate(50);
从 5.2 开始,您可以使用 withCount
来计算关系结果。
在这种情况下
$products = $products->withCount(['orders' => function ($query) {
$query->where('status', 2);
}]);
我有很多项目,每个项目都有很多订单,有的完成了,有的没有。
我想按照完成订单的数量来订购它们:
$products = $products->orderBy(function($product) {
return $product->orders->where('status', 2)->count();
})->paginate(15);
我知道订单调用不是这样工作的,但这是显示问题的最佳方法。 SortBy 不起作用,因为我想使用分页。
如果有效,试试这个:
$categories = Prodcuts::with(array('orders' => function($query) {
$query->select(DB::raw('SELECT * count(status) WHERE status = 2 as count'))
$query->orderBy('MAX(count)')
}))->paginate(15);
return View::make('products.index', compact('categories'));
注意:这个没有测试过
终于找到解决问题的好办法:
$products = $products->join('orders', function ($join) {
$join->on('orders.product_id', '=', 'products.id')
->where('orders.status', '=', 2);
})
->groupBy('products.id')
->orderBy('count', $order)
->select((['products.*', DB::raw('COUNT(orders.product_id) as count')]))->paginate(50);
从 5.2 开始,您可以使用 withCount
来计算关系结果。
在这种情况下
$products = $products->withCount(['orders' => function ($query) {
$query->where('status', 2);
}]);