You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定多表关联原生SQL转换为Laravel Query Builder写法?

解决Laravel Query Builder数组转字符串异常并转换多表关联SQL

为什么会出现「Array to String Conversion Exception」?

你这段代码的问题出在DB::table(['tbl_stock', 'shades'])的用法上:

$stock_info = DB::table(['tbl_stock', 'shades'])->get();

Laravel的table()方法接收数组时,是用来定义表别名的(比如table(['tbl_stock' => 'stock'])表示把tbl_stock表别名为stock),而不是直接传入多个表名。当你直接传多个表名的数组时,Laravel会尝试把数组转换成字符串来处理表名,自然就触发了数组转字符串的异常。

正确转换原生SQL的Query Builder写法

你的原生SQL是四个表的内连接查询,我们需要用join()方法来逐个建立表关联,完全匹配原生SQL的逻辑:

$stock_info = DB::table('tbl_stock')
    // 关联series表,对应条件 tbl_stock.series_id = series.series_id
    ->join('series', 'tbl_stock.series_id', '=', 'series.series_id')
    // 关联series_size表,对应条件 tbl_stock.size_id = series_size.size_id
    ->join('series_size', 'tbl_stock.size_id', '=', 'series_size.size_id')
    // 关联tbl_size表,对应条件 tbl_stock.size_id = tbl_size.size_id
    ->join('tbl_size', 'tbl_stock.size_id', '=', 'tbl_size.size_id')
    // 选择所有需要的字段,和原生SQL的SELECT部分一致
    ->select('tbl_stock.*', 'series.*', 'series_size.*', 'tbl_size.*')
    ->get();

可选优化:给表加别名简化代码

如果觉得表名太长,可以给每个表设置别名,让代码更简洁:

$stock_info = DB::table('tbl_stock as s')
    ->join('series as se', 's.series_id', '=', 'se.series_id')
    ->join('series_size as ss', 's.size_id', '=', 'ss.size_id')
    ->join('tbl_size as sz', 's.size_id', '=', 'sz.size_id')
    ->select('s.*', 'se.*', 'ss.*', 'sz.*')
    ->get();

这样写出来的代码和你的原生SQL逻辑完全一致,而且不会触发任何异常。

内容的提问来源于stack exchange,提问作者Pavan Baddi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:18:49