Laravel关联baseinfos表多次报Syntax error语法错误如何解决
问题原因分析
- 第一次SQL语法报错:你将字段别名错误声明在了
join方法的关联条件参数中,Laravel查询构造器的join方法第三个参数仅支持填写关联字段名,不允许在此处加as别名逻辑。 - 第二次字段覆盖问题:你查询的
gender.bas_value和degree.bas_value字段名相同,返回的结果集合中同名字段会被后查询的内容覆盖,只需在select阶段给两个字段分别指定不同别名即可解决。
正确实现代码
$records = DB::table('members') // 注意第二版写法中where条件用到了my_students表,需确认是否真的关联了该表,这里按第一版逻辑修正为members表字段,有实际关联需求可自行补充join逻辑 ->where('members.mys_olp_id', 4) ->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id') ->join('baseinfos as gender', 'members.mbr_gender_id', '=', 'gender.bas_id') ->join('baseinfos as degree', 'students.std_degree_id', '=', 'degree.bas_id') // 给同名字段设置不同别名避免覆盖 ->select('gender.bas_value as gender_value', 'degree.bas_value as degree_value') ->get() ->toArray();
最终返回的结果中,gender_value键对应性别字典值,degree_value键对应学历字典值,不会再出现覆盖问题。
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

