如何多次加入 table 并每次检索一个列值

How to join a table multiple times and retrieving one column value each time

我有一个 Laravel 5.8 项目,我需要加入 3 table 来展示一些结果。

基本上,我已将所有自定义 ID 存储在名为 baseinfos 的 table 中。

例如这里有两个自定义 ID,我需要检索它们 bas_value:

所以我尝试了这个:

$records = DB::table('members')
            ->where('mys_olp_id',4)
            ->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', 'baseinfos.bas_value')
            ->get()->toArray();

但这是错误的,并向我显示了错误:

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique

所以我需要这样说:

// as student_degree
->join('baseinfos', 'students.std_degree_id', '=', 'baseinfos.bas_id') 

// as member_gender
->join('baseinfos', 'members.mbr_gender_id', '=', 'baseinfos.bas_id') 

然后:

->select('student_degree', 'member_gender')

我该怎么做?

尝试像这样使用 alias:

$records = DB::table('members ass mm')
            ->where('mm.mys_olp_id',4)
            ->join('students as ss', 'mm.mbr_usr_id', '=', 'ss.std_mbr_id')
            ->join('baseinfos as bif', 'ss.std_degree_id', '=', 'bif.bas_id')
            ->join('baseinfos as bifs', 'mm.mbr_gender_id', '=', 'bifs.bas_id')
            ->select('mm.*')
            ->get()->toArray();

您也可以使用 leftJoin 如果它适合您:

$records = DB::table('members ass mm')
            ->where('mm.mys_olp_id',4)
            ->leftJoin('students as ss', 'mm.mbr_usr_id', '=', 'ss.std_mbr_id')
            ->leftJoin('baseinfos as bif', 'ss.std_degree_id', '=', 'bif.bas_id')
            ->leftJoin('baseinfos as bifs', 'mm.mbr_gender_id', '=', 'bifs.bas_id')
            ->select('mm.*')
            ->get()->toArray();