2017-02-13 65 views
0

这是我目前的QB。laravel多个select语句相互覆盖

$institutes = count($request->input("selected_institutes")); 
$courses = count($request->input("selected_courses")); 
$institutes_data = $request->input("selected_institutes"); 
$courses_data = $request->input("selected_courses"); 
$search=DB::table('users as u'); 
if($institutes > 0 && $courses = 0){ 
    $search=$search->select('u.id','u.first_name','u.profile_picture','inst.full_name') 
    ->leftJoin('user_institutes as ins','ins.user_id','=','u.id') 
    ->leftJoin('institutes as inst','inst.id','=','ins.institute_id'); 
} 
else if($courses > 0 && $institutes = 0){ 
    $search=$search->select('u.id','u.first_name','u.profile_picture','crse.full_name') 
    ->leftJoin('user_courses as crs','crs.user_id','=','u.id') 
    ->leftJoin('courses as crse','crse.id','=','crs.course_id'); 
} 
else if($institutes > 0 && $courses > 0){ 
    $search=$search->select('u.id','u.first_name','u.profile_picture','inst.full_name','crse.full_name') 
    ->leftJoin('user_institutes as ins','ins.user_id','=','u.id') 
    ->leftJoin('institutes as inst','inst.id','=','ins.institute_id') 
    ->leftJoin('user_courses as crs','crs.user_id','=','u.id') 
    ->leftJoin('courses as crse','crse.id','=','crs.course_id'); 
} 
$search=$search->WhereNull('u.deleted_at'); 
for($i=0;$i<$institutes;$i++){ 
    $search=$search->orWhere('inst.full_name','=',"`$institutes_data[$i]`"); 
} 
for($i=0;$i<$courses;$i++){ 
    $search=$search->orWhere('crse.full_name','=',"`$courses_data[$i]`"); 
} 
$search=$search->get(); 

结果是基于输入,给定的情景是 $院所= 2和$课程= 2, 我打印出来 ,我希望它是落在别人第二,如果是选择查询示为下面

'select * from `users` as `u` where `u`.`deleted_at` is null or `inst`.`full_name` = ?', array('`institutes 1`') or `inst`.`full_name` = ?', array('`institutes 2`') 
根据这种情况的查询我想如下

select('u.id','u.first_name','u.profile_picture','inst.full_name','crse.full_name') 
leftJoin 'user_institutes as ins' on 'ins.user_id''=''u.id' 
leftJoin 'institutes as inst' on 'inst.id''=''ins.institute_id' 
leftJoin 'user_courses as crs' on 'crs.user_id''=''u.id' 
leftJoin 'courses as crse' on 'crse.id''=''crs.course_id' 
where 'u.deleted_at' is null 
and ('inst.full_name' = 'institutes 1' 
or 'inst.full_name' = 'institutes 2') 
and ('crse.full_name' = 'courses 1' 
or 'crse.full_name' = 'courses 2'} 

任何人都可以执行克

请使用这些if else条件构造我的QB并为where子句变量输入运行for循环。 (我的语法道歉)

+0

什么被覆盖? –

+0

也许你应该只添加另一个如果$ institutes = 2和$ courses = 2的具体数量。 – Grynets

+0

@ jedrzej.kurylo,select语句被覆盖,但我试图修改QB,这是最新的输出只是不如我在寻找 – kearn

回答

0

我的理解是你想做一个条件查询,它具有查询连接根据用户输入(筛选条件), 我已经做了以下例子如何在Laravel按照我的示例,尝试重新编写调整查询。请注意,您可以在关闭时添加whereorWhere条件的数量。

$search = DB::table('users as u') 
     ->select(['u.id','u.first_name','u.profile_picture','inst.full_name']) 
     ->whereNull('u.deleted_at') 
     ->when(($request->has("selected_institutes")) && (!$request->has("selected_courses")) , function ($query) use ($request) { 
      return $query->leftJoin('user_institutes as ins','ins.user_id','=','u.id') 
         ->leftJoin('institutes as inst','inst.id','=','ins.institute_id'); 

     }) 

     ->when(($request->has("selected_courses")) && (!$request->has("selected_institutes")), function ($query) use ($request) { 
      return $query->leftJoin('user_courses as crs','crs.user_id','=','u.id') 
       ->leftJoin('courses as crse','crse.id','=','crs.course_id'); 

     }) 

     ->when($request->has("selected_institutes") && $request->has("selected_courses"), function ($query) use ($request) { 
      return $query ->leftJoin('user_institutes as ins','ins.user_id','=','u.id') 
       ->leftJoin('institutes as inst','inst.id','=','ins.institute_id') 
       ->leftJoin('user_courses as crs','crs.user_id','=','u.id') 
       ->leftJoin('courses as crse','crse.id','=','crs.course_id'); 

     }) 
     ->get();