如何将自定义 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中。例如 8std_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;
    }