2017-05-11 112 views
1

我有一个控制器,它根据URL'request'参数返回一个SQL查询。在这种情况下,如何动态更改sql查询?

switch ($request->get('request')){ 
     case '3dvideo': 
      $students = Student::orderBy('year', 'desc')->where('orientation', '3D')->inRandomOrder()->paginate(12); 
      break; 
     case '2d': 
      $students = Student::orderBy('year', 'desc')->where('orientation', '2D')->inRandomOrder()->paginate(12); 
      break; 
     case 'web': 
      $students = Student::orderBy('year', 'desc')->where('orientation', 'web')->inRandomOrder()->paginate(12); 
      break; 
     case 'all': 
      $students = Student::orderBy('year', 'desc')->inRandomOrder()->paginate(12); 
      break; 
     default: 
      $students = Student::orderBy('year', 'desc')->inRandomOrder()->paginate(12); 
      break; 
    } 

现在我有第二个参数在我的网址(一年),我不知道如何根据这两个参数做(如果今年存在的话),我回到这样一个SQL查询:

$students = Student::orderBy('year', 'desc')->where('orientation', 'web')->where('year', 'MY-YEAR')->inRandomOrder()->paginate(12); 

非常感谢您

回答

1

你可以做这样的事情:

$students = Student::query(); 

if (in_array($request->request, ['3dvideo', '2d', 'web'])) { 
    $students = $students->where('orientation', $request->request); 
} 

if ($request->has('year')) { 
    $sudents = $students->where('year', $request->year); 
} 

$students = $students->latest('year')->inRandomOrder()->paginate(12); 
+0

谢谢!按年份排序适用于您的方法,但它忽略了方向参数,因此我每年为所有学生进行康复,而不是以“3dvideo”方向为例,所有学生一年 –

1

像那样优化查询。

$query = Student::orderBy('year', 'desc')->inRandomOrder(); 

    if($request->has('orientation')){ 
      query->where('orientation',$request->get('orientation')); 
    } 

    if($request->has('year')){ 
      query->where('year',$request->get('year')); 
    } 
    $student = $query->paginate(12);