我有以下代码可以正常工作:
$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是否要按升序或降序返回产品?
答案 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.*'))
表中的所有行?通过上述内容,您可以将查询简化为:
$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。