Laravel Eloquent关联更新报错:未知table2.id列的解决咨询
解决Laravel Eloquent联表更新关联表字段报错的问题
方案一:给表添加别名,明确字段归属
给两张表设置别名,在DB::raw中用别名引用关联表字段,让Query Builder能正确识别字段所属的表:
DB::table('table1 as t1') ->join('table2 as t2', 't1.row_hash', '=', 't2.row_hash') ->where('t1.some_column', '=', 0) ->whereNull('t1.reference_no') ->update([ 't1.column_to_update' => 1, 't1.column_to_update_2' => 1, 't1.column_to_update_3' => 1, 't1.reference_no' => DB::raw('t2.id') ]);
方案二:直接执行验证通过的原生SQL
既然你已经确认原生SQL在MySQL客户端能正常运行,直接用DB::statement执行原生语句是最稳妥的方式,规避Query Builder的解析问题:
DB::statement(" UPDATE table1 JOIN table2 ON table1.row_hash = table2.row_hash SET table1.column_to_update = 1, table1.column_to_update_2 = 1, table1.column_to_update_3 = 1, table1.reference_no = table2.id WHERE table1.some_column = 0 AND table1.reference_no IS NULL ");
问题原因
Laravel Query Builder在处理联表更新时,若未明确表别名,可能会将DB::raw中的table2.id误解析为主表(table1)的字段,导致找不到列的错误。添加别名或直接用原生SQL就能解决这个问题。
内容的提问来源于stack exchange,提问作者hyphen
相关产品推荐
相关产品推荐

