如何将自定义 if..else 语句添加到查询中的选定列以将数据从数据库导出到 excel 文件
How to add custom if..else statements to the selected columns at a query for exporting data from database into excel file
我正在使用 Laravel 5.8 和 laravel-excel 将一些数据导出到 Excel 文件中。
所以我将这个方法添加到模型中:
public static function getAccounts($id)
{
$records = DB::table('members')
->where('mys_creator_id',$id)
->where('mys_olp_id',4)
->join('my_students', 'members.mbr_usr_id', '=', 'my_students.mys_mbr_id')
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->select('members.mbr_name', 'members.mbr_family', 'members.mbr_father_name','members.mbr_national_code','members.mbr_birthday','members.mbr_phone','members.mbr_mobile','members.mbr_post_code','members.mbr_prv_id','members.mbr_cit_id','members.mbr_gender_id','members.mbr_address','students.std_degree_id','students.std_grade_id','students.std_filed_id','students.std_major_id','students.std_school','students.std_education_type_id','my_students.mys_paid_price')
->get()->toArray();
return $records;
}
这工作正常,但一些数据保留并且 id
而不是文本值:
所有这些id都存储在baseinfos
table中。例如 8 的 std_degree_id
是这样的:
现在我需要在导出的 [=56] 中获取 bas_value
和 return 而不是 returning 数字 8 =] 文件.
所以它看起来像这样:
if(students.std_degree_id == 9){
// print Elementry
}elseif(students.std_degree_id == 10){
// print Academy
}else{
...
}
那我该怎么做呢?
更新 #1:
$records = DB::table('members')
->where('mys_creator_id',$id)
->where('mys_olp_id',4)
->join('my_students', 'members.mbr_usr_id', '=', 'my_students.mys_mbr_id')
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->join('baseinfos', 'students.std_degree_id', '=', 'baseinfos.bas_id')
->join('baseinfos', 'members.mbr_gender_id', '=', 'baseinfos.bas_id')
->select(...,'baseinfos.bas_value','members.mbr_address','baseinfos.bas_value',...)->get()->toArray();
return $records;
如果我用 baseinfos
table 再添加两个连接,我会得到这个错误:
SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique
这主要是因为我在 select
.
中得到了两次 baseinfos.bas_value
我不确定您是否在其他任何地方使用 getAccounts,如果您正在创建一种新方法来格式化此数据。
public static function getAccounts($id)
{
$degrees = [
9 => 'Elementry',
10 => 'Academy',
];
$records = DB::table('members')
->where('mys_creator_id',$id)
->where('mys_olp_id',4)
->join('my_students', 'members.mbr_usr_id', '=', 'my_students.mys_mbr_id')
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->select('members.mbr_name', 'members.mbr_family', 'members.mbr_father_name','members.mbr_national_code','members.mbr_birthday','members.mbr_phone','members.mbr_mobile','members.mbr_post_code','members.mbr_prv_id','members.mbr_cit_id','members.mbr_gender_id','members.mbr_address','students.std_degree_id','students.std_grade_id','students.std_filed_id','students.std_major_id','students.std_school','students.std_education_type_id','my_students.mys_paid_price')
->get();
// if map is not working add it in collect($records)->map.
$records->map(function($record) use($degrees) {
$record->std_degree_id = $degrees[$record->std_degree_id];
return $record;
});
return $records->toArray();
}
但我猜 $record->std_degree_id
是一个关系,所以只使用关系标题而不是我创建的数组映射。
您需要再加入一个 table 并显示那个 table 中的相应字段:
public static function getAccounts($id)
{
$records = DB::table('members')
->where('mys_creator_id',$id)
->where('mys_olp_id',4)
->join('my_students', 'members.mbr_usr_id', '=', 'my_students.mys_mbr_id')
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->join('baseinfos', 'students.std_degree_id', '=', 'baseinfos.bas_id')
->select('members.mbr_name', 'members.mbr_family', 'members.mbr_father_name','members.mbr_national_code','members.mbr_birthday','members.mbr_phone','members.mbr_mobile','members.mbr_post_code','members.mbr_prv_id','members.mbr_cit_id','members.mbr_gender_id','members.mbr_address','baseinfo.bas_value','students.std_grade_id','students.std_filed_id','students.std_major_id','students.std_school','students.std_education_type_id','my_students.mys_paid_price')
->get()->toArray();
return $records;
}
我正在使用 Laravel 5.8 和 laravel-excel 将一些数据导出到 Excel 文件中。
所以我将这个方法添加到模型中:
public static function getAccounts($id)
{
$records = DB::table('members')
->where('mys_creator_id',$id)
->where('mys_olp_id',4)
->join('my_students', 'members.mbr_usr_id', '=', 'my_students.mys_mbr_id')
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->select('members.mbr_name', 'members.mbr_family', 'members.mbr_father_name','members.mbr_national_code','members.mbr_birthday','members.mbr_phone','members.mbr_mobile','members.mbr_post_code','members.mbr_prv_id','members.mbr_cit_id','members.mbr_gender_id','members.mbr_address','students.std_degree_id','students.std_grade_id','students.std_filed_id','students.std_major_id','students.std_school','students.std_education_type_id','my_students.mys_paid_price')
->get()->toArray();
return $records;
}
这工作正常,但一些数据保留并且 id
而不是文本值:
所有这些id都存储在baseinfos
table中。例如 8 的 std_degree_id
是这样的:
现在我需要在导出的 [=56] 中获取 bas_value
和 return 而不是 returning 数字 8 =] 文件.
所以它看起来像这样:
if(students.std_degree_id == 9){
// print Elementry
}elseif(students.std_degree_id == 10){
// print Academy
}else{
...
}
那我该怎么做呢?
更新 #1:
$records = DB::table('members')
->where('mys_creator_id',$id)
->where('mys_olp_id',4)
->join('my_students', 'members.mbr_usr_id', '=', 'my_students.mys_mbr_id')
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->join('baseinfos', 'students.std_degree_id', '=', 'baseinfos.bas_id')
->join('baseinfos', 'members.mbr_gender_id', '=', 'baseinfos.bas_id')
->select(...,'baseinfos.bas_value','members.mbr_address','baseinfos.bas_value',...)->get()->toArray();
return $records;
如果我用 baseinfos
table 再添加两个连接,我会得到这个错误:
SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique
这主要是因为我在 select
.
baseinfos.bas_value
我不确定您是否在其他任何地方使用 getAccounts,如果您正在创建一种新方法来格式化此数据。
public static function getAccounts($id)
{
$degrees = [
9 => 'Elementry',
10 => 'Academy',
];
$records = DB::table('members')
->where('mys_creator_id',$id)
->where('mys_olp_id',4)
->join('my_students', 'members.mbr_usr_id', '=', 'my_students.mys_mbr_id')
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->select('members.mbr_name', 'members.mbr_family', 'members.mbr_father_name','members.mbr_national_code','members.mbr_birthday','members.mbr_phone','members.mbr_mobile','members.mbr_post_code','members.mbr_prv_id','members.mbr_cit_id','members.mbr_gender_id','members.mbr_address','students.std_degree_id','students.std_grade_id','students.std_filed_id','students.std_major_id','students.std_school','students.std_education_type_id','my_students.mys_paid_price')
->get();
// if map is not working add it in collect($records)->map.
$records->map(function($record) use($degrees) {
$record->std_degree_id = $degrees[$record->std_degree_id];
return $record;
});
return $records->toArray();
}
但我猜 $record->std_degree_id
是一个关系,所以只使用关系标题而不是我创建的数组映射。
您需要再加入一个 table 并显示那个 table 中的相应字段:
public static function getAccounts($id)
{
$records = DB::table('members')
->where('mys_creator_id',$id)
->where('mys_olp_id',4)
->join('my_students', 'members.mbr_usr_id', '=', 'my_students.mys_mbr_id')
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->join('baseinfos', 'students.std_degree_id', '=', 'baseinfos.bas_id')
->select('members.mbr_name', 'members.mbr_family', 'members.mbr_father_name','members.mbr_national_code','members.mbr_birthday','members.mbr_phone','members.mbr_mobile','members.mbr_post_code','members.mbr_prv_id','members.mbr_cit_id','members.mbr_gender_id','members.mbr_address','baseinfo.bas_value','students.std_grade_id','students.std_filed_id','students.std_major_id','students.std_school','students.std_education_type_id','my_students.mys_paid_price')
->get()->toArray();
return $records;
}