【发布时间】:2023-02-11 23:36:43
【问题描述】:
我正在尝试运行此更新语句,但出现此错误:
SQLSTATE[HY000]: General error: 1 no such column: table2.id
DB::table('table1')
->join('table2', 'table1.row_hash', '=', 'table2.row_hash')
->where('table1.some_column', '=', 0)
->whereNull('table1.reference_no')
->update([
'table1.column_to_update' => 1,
'table1.column_to_update_2' => 1,
'table1.column_to_update_3' => 1,
'table1.reference_no' => DB::raw('table2.id') <--comment this line out and it works.
]);
如果我从更新语句中注释掉该列,它就会起作用。我尝试在 DB::raw() 语句中使用引号和反引号的各种组合,但仍然出现相同的错误。 This post 似乎表明我这样做是正确的,但它不合作。
如何将table1.reference_no的值更新为table2.id的值?我希望在一个雄辩的查询中完成此操作,因为它是一个非常基本的 SQL 语句。不幸的是,我也尝试过只使用原始 SQL 语句,尽管在我的 mysql 客户端中直接运行它时它会产生其他错误。对于它应该多么简单来说,这完全花费了太多时间。
【问题讨论】:
-
您正在混淆层后面执行 MySQL 更新。如果可以,请尝试将当前(失败的)更新查询打印到日志文件中,并查看语法问题是什么。
-
您是想在
whereNull调用中加入反引号吗?那是执行运算符,所以可能返回 null。 -
而且,这可能是显而易见的,但是
table2/quickbooks_transactions是否有id列? -
@benJ - 抱歉,反引号是无意的,这不是导致错误的原因。我更新了帖子。 table2 确实有一个 ID 列..
标签: php mysql laravel eloquent laravel-9