Laravel多表关联查询如何获取包含coordinator_status为null的所有数据
问题原因
你当前使用的是默认**内连接(INNER JOIN)**关联status表,只有当courselist.coordinator_status和status.id存在匹配值时才会返回对应记录,所以coordinator_status为null的记录会被直接过滤掉,无法出现在结果集中。
调整方案
只需要将status表的关联方法从join改为leftJoin即可,左连接会完整保留左表courselist的所有符合条件的记录,哪怕右表status没有匹配的关联数据:
$coordetails = DB::table('courselist') ->join('users','users.id','=','courselist.coordinator') // 替换为左连接 ->leftJoin('status','status.id','=','courselist.coordinator_status') ->select('courselist.id','users.name','status.status') ->where('courselist.faculty_id','=',$facultyid) ->get();
补充说明
调整后查询结果中,原本coordinator_status为null的记录对应的status字段也会返回null,如果你需要给这类空值设置默认展示文案,可以修改select部分的写法:
->select('courselist.id','users.name', DB::raw("COALESCE(status.status, '未设置') as status"))
上述写法会自动将空的status值替换为未设置,你可以根据业务需求修改默认值内容。
内容的提问来源于stack exchange,提问作者user17298617
相关产品推荐
相关产品推荐

