Laravel多表leftJoin查询1054字段不存在报错排查
错误原因
- 字段归属错误:
currency_name是currencies表的字段,不存在于projects表中,你写的projects.currency_name会直接触发字段不存在的报错。 - 字段列表错误:需要查询的
country_name没有出现在查询字段列表中,反而多了所有关联表都不存在的code字段。 - 同名字段未做明确指定:
country_name同时存在于countries和timezones表,不指定表前缀会产生字段歧义,也不符合要求取countries表该字段值的规则。 - 字段名拼写错误:对照给出的表结构,timezones表存储时区的字段为
time_onze,你写的time_zone在表中不存在。
正确实现代码
$projects = DB::table('projects') ->leftJoin('countries', 'projects.country_id', '=', 'countries.id_country') ->leftJoin('currencies', 'projects.currency_id', '=', 'currencies.id_currency') ->leftJoin('timezones', 'projects.timezone_id', '=', 'timezones.id_timezone') ->get([ 'projects.name', 'projects.website', 'countries.country_name', 'timezones.time_onze as time_zone', 'currencies.currency_name' ]); return response()->json($projects, 200);
补充说明
- 所有查询字段都加上了对应表前缀,彻底避免多表同名字段冲突,确保
country_name取值来自countries表,不会误取timezones表的同名字段。 - 代码中给
timezones.time_onze起了别名time_zone,最终返回的字段名和预期一致。如果你的timezones表时区字段实际命名就是time_zone,把该行改成'timezones.time_zone'即可,不需要加别名。
内容的提问来源于stack exchange,提问作者Shibbir
相关产品推荐
相关产品推荐

