1

我正在一个项目中构建一个过滤器功能。

我有一个过滤器选项“显示最新”、“显示最旧”和许多其他选项。我找到了一种实现条件 where 子句的方法,但似乎没有条件 orderBy 类。

我的条件 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);

我怎样才能以雄辩的方式做到这一点?

4

1 回答 1

1

当然,你可以这样做:

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);
于 2015-12-28T18:51:45.013 回答