Php Laravel:按api进行动态查询排序

Php Laravel:按api进行动态查询排序,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,我是laravel新手,正在尝试编写一个搜索API,示例url如下。排序“+”表示升序,“-”表示降序。查询、分类部分已经完成,我得到了所需的结果,但排序部分仍然存在。我不知道如何动态地进行多重排序。我可以像where()子句[['rating','asc'],['distance','desc']中那样按顺序给出排序数组吗。我看过很多帖子,人们通过反复调用orderBy()进行多重排序,但这是静态的,例如orderBy('rating','asc')->orderBy('distance','

我是laravel新手,正在尝试编写一个搜索API,示例url如下。排序“+”表示升序,“-”表示降序。查询、分类部分已经完成,我得到了所需的结果,但排序部分仍然存在。我不知道如何动态地进行多重排序。我可以像where()子句[['rating','asc'],['distance','desc']中那样按顺序给出排序数组吗。我看过很多帖子,人们通过反复调用orderBy()进行多重排序,但这是静态的,例如
orderBy('rating','asc')->orderBy('distance','desc')
,我如何动态地进行排序

localhost:8000/search?q=query&cat=category&sort=+评级,-距离,-年龄

class SearchController extends Controller
{
    public function index(Request $request){

        $sort = explode(',', $request->sort);

        return DB::table('posts')->join('users', 'users.id', '=', 'posts.user_id')->join('locations', 'locations.id', '=', 'users.location_id')->join('main_categories', 'main_categories.id', '=', 'posts.main_category_id')->select('posts.*', 'users.*', 'locations.address', 'main_categories.name as cat', DB::raw('ROUND((6371 * ACOS(COS(RADIANS(31.430443800000003)) * COS(RADIANS(locations.lattitude)) * COS(RADIANS(locations.longitude) - RADIANS(74.280726)) + SIN(RADIANS(31.430443800000003)) * SIN(RADIANS(locations.lattitude)))),2) AS DISTANCE'))->where([['posts.title','like','%'.$request->q.'%'],['main_categories.name', '=', $request->cat]])->orwhere([['posts.description','like','%'.$request->q.'%'],['main_categories.name', '=', $request->cat]])->orderBy($request->sort,'DESC')->get();
    }
}
$query // your query

foreach($sorts as $sort)
{
  $query->orderBy($sort,'DESC')
}

$sortedQuery = $query->get();