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;
}
意识到您正在使用此方法运行n + 1个查询。 – veksen
我不能用另一种方法做,因为我有一个如果这样做相同的查询,所以它以任何其他方式割裂,另一种方式,我尝试了它给我的结果,但它给了我3或4次用户为每个研讨会,我不能做除此之外还有其他的建议吗? –