2016-04-05 138 views
3

我有一个大的搜索查询和所有的伟大工程,但我需要给每个用户的软件包(研讨会)显示该刀片搜索查询Laravel输入

<tbody> 
     @foreach($users as $i=>$user) 
      <tr> 
       <td>{{ $i+1 }}</td> 
       <td>{{ $user->home_lastname }}</td> 
       <td>{{ $user->home_firstname }} </td> 
     //------> <td> HERE I NEED TO SHOW ALL THE PACKAGES NAMES(SEMINARS) FOR EACH USER</td> 
       <td>{{ $user->home_id }}</td> 
       <td></td> 

UserController的

$builder = User::query(); 

    if (Input::has('lastname')) { 
     $queryString = Input::get('lastname'); 
     $builder->where('home_lastname', 'LIKE', "%$queryString%"); 
    } 

    if (Input::has('name')) { 
     $queryString = Input::get('name'); 
     $builder->where('home_firstname', 'LIKE', "%$queryString%"); 
    } 

    if (Input::has('id')) { 
     $queryString = Input::get('id'); 
     $builder->where('home_id', 'LIKE', "%$queryString%"); 
    } 

    if (Input::has('type-select')){ 
     $userType = Input::get('type-select'); 
     $builder->select('*') 
      ->where('Home_Students.home_elv_rights',$userType) 
      ->get(); 
    } 


    if(Input::has('seminar-select')){ 
     $seminar = Input::get('seminar-select'); 
     $builder->select('*') 
      ->join('Home_StudentPackages','Home_StudentPackages.hsp_homeStudID','=','Home_Students.home_id') 
      ->join('Home_Packages','Home_Packages.Package_ID','=','Home_StudentPackages.hsp_packid') 
      ->where('Home_Packages.Package_ID',$seminar) 
      ->get(); 
    } 

    if(Input::has('class-select')){ 
     $class = Input::get('class-select'); 
     $builder->select('*') 
      ->join('Hw_StudentClasses','Hw_StudentClasses.Stclass_studentid','=','Home_Students.home_id') 
      ->join('Hw_Classes','Hw_Classes.Class_id','=','Hw_StudentClasses.Stclass_classid') 
      ->where('Hw_Classes.Class_id',$class) 
      ->get(); 
    } 

    if(Input::has('date_created_from')) { 
     $date = date("Y-m-d", strtotime(Input::get('date_created_from'))); 
     $builder->select('*') 
      ->whereBetween('Home_Students.home_dateCreated', [$date, date("Y-m-d")]) 
      ->get(); 
     } 
     elseif(Input::has('date_created_from','date_created_untill')){ 
      $date = date("Y-m-d", strtotime(Input::get('date_created_from'))); 
      $date2 = date("Y-m-d", strtotime(Input::get('date_created_untill'))); 
      $builder->select('*') 
       ->whereBetween('Home_Students.home_dateCreated', [$date,$date2]) 
       ->get(); 
      } 
      elseif(Input::has('date_created_untill')){ 
      $date2 = date("Y-m-d", strtotime(Input::get('date_created_untill'))); 
      $date = date("Y-m-d", strtotime(Input::get('date_created_from'))); 
       $builder->select('*') 
       ->whereBetween('Home_Students.home_dateCreated',[$date,$date2]) 
       ->get(); 
      } 




    // ... more clauses from the querystring 
    $users = $builder->orderBy('home_lastname')->get(); 



     return View::make('user.show')->with(array('users' => $users)); 
    } 

我试过这些连接到开始$构建器查询和控制器结束的生成器,但它没有工作。如果没有工作,每个wheres也没有工作,所以我不知道任何其他方式来做到这一点。

DB::table('Home_Students') 
      ->select('home_lastname','home_firstname','home_id','Package_Name') 
      ->join('Home_StudentPackages','Home_StudentPackages.hsp_homeStudID','=','Home_Students.home_id') 
      ->join('Home_Packages','Home_Packages.Package_ID','=','Home_StudentPackages.hsp_PackID' 
      ->get(); 

我只需要要为每个用户Packages_Names我的刀片看法,但有一个问题与研讨会(包)的搜索。

编辑

我试图在用户的模型来创建公共职能,我会得到每个用户的所有包(研讨会);你知道有什么办法做到这一点?

有一个数据透视表,结合了用户和软件包!

编辑2我认为这是错误的,因为它返回[{“Package_Name”:“Excel”}] - 是否有可能返回这个字符串?

public function getUserSeminars(){ 



     $users = Seminar::select('Package_Name') 
      ->join('Home_StudentPackages','Home_StudentPackages.hsp_PackID','=','Home_Packages.Package_ID') 
      ->join('Home_Students','Home_Students.home_id','=','Home_StudentPackages.hsp_homeStudID') 
      ->where('Home_Students.home_id','=',$this->home_id) 
      ->get(); 

     return $users; 
    } 

回答

1

不要做这么复杂的搜索查询,并在控制器内,我去我的用户模型,我做了这样的功能:

public function getUserSeminars(){ 


     $seminar = Seminar::select('Package_Name') 
      ->join('Home_StudentPackages','Home_StudentPackages.hsp_PackID','=','Home_Packages.Package_ID') 
      ->join('Home_Students','Home_Students.home_id','=','Home_StudentPackages.hsp_homeStudID') 
      ->where('Home_Students.home_id','=',$this->home_id) 
      ->get(); 

     return $seminar; 



    } 

然后我把它叫做在这样

刀片
   <td> 
        @foreach($user->getUserSeminars() as $seminar) 
         <li> {{$seminar->Package_Name}} </li> 
        @endforeach 
       </td> 

它像一个魅力工作。 希望这可以帮助别人!

+0

意识到您正在使用此方法运行n + 1个查询。 – veksen

+0

我不能用另一种方法做,因为我有一个如果这样做相同的查询,所以它以任何其他方式割裂,另一种方式,我尝试了它给我的结果,但它给了我3或4次用户为每个研讨会,我不能做除此之外还有其他的建议吗? –