我有更多的10个SQL表有员工的详细信息。一些表有单行的详细信息,如基本的详细信息表,这是主表。第二个联系人表我用id=emp_id和leftjoin索引这个表,以获得在单一数组中的所有数据。而且我也有一些更多的表,如eduction,它有多行匹配emp_id,我想在单一数组中的所有表数据。员工教育程度字段名称为education_level,它有2行,我需要类似education_level_1=〉值、education_level_2=〉值等结果...
$employeeData = EmployeeBasicDetail::select(
'*','employees_basic_details.id as emp_id',
'employees_basic_details.client_id',)
->where('employees_basic_details.id',$emp_id)
->leftJoin('employees_company_details', 'employees_company_details.employee_id', '=', 'employees_basic_details.id')
->leftJoin('employees_contact_details', 'employees_contact_details.employee_id', '=',
->first();
$employeeEducations = EmployeeEducationDetail::where('employee_id',$emp_id)->get();
$employeeEmploymentDates = EmployeeEmploymentDateDetail::where('employee_id',$emp_id)->get();
这段代码是可以的,只要我在刀片中发送它们,这样我就可以使foreach和显示重复的数据在循环中,并显示所有其他在employeeData ex:
return view('hrm.employees.create',compact('auth_user','auth_role','superadmin','employeeData','employeeEducations','employeeEmploymentDates'));
但是我想让excel下载,所以我把代码修改成
$data = EmployeeBasicDetail::select('employees_basic_details.employee_first_name', DB::raw('GROUP_CONCAT(employees_education_details.education_level SEPARATOR ",") as education_levels'))
->leftJoin('employees_education_details', 'employees_basic_details.id', '=', 'employees_education_details.employee_id')
->where('employees_basic_details.id', 1)
->groupBy('employees_basic_details.id', 'employees_basic_details.employee_first_name')
->first();
//dd($data);
if ($data !== null) {
$employeeData = array(
'employee_first_name' => $data->employee_first_name,
);
$education_levels = explode(',', $data->education_levels);
foreach ($education_levels as $key => $level) {
$employeeData['education_level_' . ($key + 1)] = $level;
}
} else {
$employeeData = array();
}
它的工作,我可以得到所有的数据在一个数组中,我这个代码,我需要提到所有的字段在选择和组,并再次在foreach我正在处理15表和120字段总数。是他们的任何更短的方式来实现这一点。请让我知道,如果任何更多的细节需要。我真的很喜欢她的任何想法,使它更聪明的方式来处理这个朋友,我希望它会感兴趣,你给予我答案。谢谢。
1条答案
按热度按时间tp5buhyn1#
定义基本员工详细信息的模型
在控制器方法中,获取基本的雇员详细信息并立即加载相关的表
现在,您可以使用点表示法访问相关数据
要获取单个数组中的教育数据,可以使用map()方法
将所有数据合并到单个数组中
最后,返回数组或生成excel下载