条件顺序
Conditional orderBy
我正在项目中构建过滤器功能。
我有一个过滤器选项 "Show newest"、"Show oldest" 和许多其他选项。我找到了一种如何实现条件 where 子句的方法,但似乎没有条件 orderBy class。
我的条件 where 子句如下所示:
$query->where(function($query) use ($request){
if( ! empty($request->input('prices')) ){
$opts = $request->prices;
$query->where('price_id', $opts[0]);
}
})
有没有办法用 ->orderBy 来做到这一点?
更新
return Auction::where('end_date', '>', Carbon::now() )
->where('locale', $locale)
->where('sold', 0)
->where(function($query) use ($request){
if( ! empty($request->input('prices')) ){
$opts = $request->prices;
$query->where('price_id', $opts[0]);
}
})->paginate(8);
如何以 eloquent 方式完成?
当然,你也可以这样做:
if ($request->input('id_desc')) {
$query = $query->orderBy('id', 'DESC');
}
或者您可以这样做:
$columns = ['id','name',]; // here define columns you allow for sorting
$orderBy = ['ASC', DESC'];
$column = $request->input('order_by_column');
$type = $request->input('order_by_type');
if (!in_array($column, $columns)) {
$column = 'id';
}
if (!in_array($type , $orderBy )) {
$type = 'ASC';
}
$query = $query->orderBy($column, $type);
编辑
使用您的代码:
$query = Auction::where('end_date', '>', Carbon::now() )
->where('locale', $locale)
->where('sold', 0)
->where(function($query) use ($request){
if( ! empty($request->input('prices')) ){
$opts = $request->prices;
$query->where('price_id', $opts[0]);
}
});
if ($request->input('id_desc')) {
$query = $query->orderBy('id', 'DESC');
}
return $query->paginate(8);
我正在项目中构建过滤器功能。
我有一个过滤器选项 "Show newest"、"Show oldest" 和许多其他选项。我找到了一种如何实现条件 where 子句的方法,但似乎没有条件 orderBy class。
我的条件 where 子句如下所示:
$query->where(function($query) use ($request){
if( ! empty($request->input('prices')) ){
$opts = $request->prices;
$query->where('price_id', $opts[0]);
}
})
有没有办法用 ->orderBy 来做到这一点?
更新
return Auction::where('end_date', '>', Carbon::now() )
->where('locale', $locale)
->where('sold', 0)
->where(function($query) use ($request){
if( ! empty($request->input('prices')) ){
$opts = $request->prices;
$query->where('price_id', $opts[0]);
}
})->paginate(8);
如何以 eloquent 方式完成?
当然,你也可以这样做:
if ($request->input('id_desc')) {
$query = $query->orderBy('id', 'DESC');
}
或者您可以这样做:
$columns = ['id','name',]; // here define columns you allow for sorting
$orderBy = ['ASC', DESC'];
$column = $request->input('order_by_column');
$type = $request->input('order_by_type');
if (!in_array($column, $columns)) {
$column = 'id';
}
if (!in_array($type , $orderBy )) {
$type = 'ASC';
}
$query = $query->orderBy($column, $type);
编辑
使用您的代码:
$query = Auction::where('end_date', '>', Carbon::now() )
->where('locale', $locale)
->where('sold', 0)
->where(function($query) use ($request){
if( ! empty($request->input('prices')) ){
$opts = $request->prices;
$query->where('price_id', $opts[0]);
}
});
if ($request->input('id_desc')) {
$query = $query->orderBy('id', 'DESC');
}
return $query->paginate(8);