Laravel Eloquent内连接查询报错:获取两表匹配数据失败
解决Laravel内连接报错:Base table or view not found
嘿,第一次用内连接就踩这个坑太正常了,我来帮你把问题捋明白~
问题根源
你写的join方法参数顺序搞反啦!Laravel的join第一个参数应该是要关联的表名,而不是字段。你写成St::join('sts.pn', '=', 'pn_list.pn')时,框架会误以为你要关联一个叫sts.pn的表(而不是sts表的pn字段),这就直接导致了Table 'sts.pn' doesn't exist的错误。
正确的写法
简洁版(适合简单关联)
按照「关联表名 → 主表字段 → 运算符 → 关联表字段」的顺序传参即可:
$majis = St::join('pn_list', 'sts.pn', '=', 'pn_list.pn')->get(); return view('contacts.index')->with('majis', $majis);
灵活版(适合复杂关联条件)
如果之后需要加额外的关联筛选条件,用闭包写法会更清晰易读:
$majis = St::join('pn_list', function ($join) { $join->on('sts.pn', '=', 'pn_list.pn'); // 这里可以追加更多条件,比如 $join->where('pn_list.is_valid', 1); })->get(); return view('contacts.index')->with('majis', $majis);
小提醒
- 确认你的
St模型对应的数据库表确实是sts(Laravel默认模型名单数对应表名复数,这里是匹配的,但如果有自定义表名,记得在模型里添加protected $table = '你的表名';) - 如果不需要返回所有字段,别直接用
get(),可以用select('sts.pn', 'pn_list.xxx')指定需要的字段,避免返回冗余数据
内容的提问来源于stack exchange,提问作者blueink
相关产品推荐
相关产品推荐

