Laravel雄辩,如何订购自定义排序

时间:2015-07-14 13:54:34

标签: php laravel laravel-5

我有以下代码可以正常工作:

$products = Product::like($search)->whereIn('id', $request->input('product_ids'))->skip($offset)->take($limit)->get(array('products.*'))->sortBy(function($product) use ($sort_order) {
    $number = (isset($sort_order[$product->id])) ? $sort_order[$product->id] : 0;
    return $number;
});

以升序返回项目,如何指定sortby是否要按升序或降序返回产品?

3 个答案:

答案 0 :(得分:2)

//$order contains either 'asc' or 'desc'
$products = Product::like($search)->whereIn('id', $request->input('product_ids'))->skip($offset)->take($limit)->get(array('products.*'))->sortBy(function($product) use ($sort_order, $direction) {
    $number = (isset($sort_order[$product->id])) ? $sort_order[$product->id] : 0;
    return ($direction == 'asc') ? $number : -$number;
});

答案 1 :(得分:0)

我真的不明白查询。那里有很多事情真的不应该。例如:

  • 您没有从任何其他表格中选择数据,那么为什么要在products方法(get())中指定->get(array('products.*'))表中的所有行?
  • 为什么要将订购函数应用于返回的集合,而不是仅仅将order子句应用于查询?

通过上述内容,您可以将查询简化为:

$productIds = [1, 2, 3, 4];

$direction = 'asc'; // or desc

$products = Product::like($search)
                   ->whereIn('id', $productIds)
                   ->skip($offset)
                   ->take($limit)
                   ->orderBy('id', $direction)
                   ->get();

此外,如果使用paginate()辅助方法,则无需手动指定偏移和限制。

答案 2 :(得分:0)

只需将sortBy用于ASC(现在如何使用)和sortByDesc用于DESC。