Laravel查询报错:Illuminate\Database\Query\Expression无法转换为字符串
解决Laravel查询报错:Object of class Illuminate\Database\Query\Expression could not be converted to string
错误原因
你在whereRaw中直接拼接DB::raw()的返回值,而DB::raw()返回的是Illuminate\Database\Query\Expression对象,并非字符串,字符串拼接时无法将对象转为字符串,因此触发报错。
修复方案
方案1:直接拼接子查询SQL字符串
去掉多余的DB::raw()包裹,直接使用子查询生成的SQL字符串拼接:
$draft = $this->query ->whereRaw('t.id IN (' . $inner_query_draft->toSql() . ')') ->mergeBindings($inner_query_draft);
方案2:Laravel原生子查询写法(更推荐)
Laravel支持直接将查询构建器实例作为子查询传入whereIn,框架会自动处理SQL生成和参数绑定,无需手动操作:
$draft = $this->query ->whereIn('t.id', $inner_query_draft);
这种写法不仅更简洁,还能避免手动拼接可能引发的SQL注入风险。
验证方式
使用dd($draft->toSql())查看最终生成的SQL语句,同时检查绑定参数是否正确匹配。
内容的提问来源于stack exchange,提问作者Elsa
相关产品推荐
相关产品推荐

