【发布时间】:2022-01-27 09:27:08
【问题描述】:
我尝试让我的第一个查询返回 affected rows: 0 以查看事务是否失败,但它继续执行第二个查询。
我应该手动中断交易吗?
DB::transaction(function () {
User::where('id', 1002)->update(['name' => 'x']); // id:1002 doesn't exist
Post::where('user_id', 1)->update(['title' => 'New Title']);
});
【问题讨论】:
-
为什么会失败?
-
它没有失败,只是没有找到要更新的内容。在尝试第二个查询之前,您可能希望在第一个查询中检查受影响的行。
-
@aynber 如果给定的 id 存在,但 MySQL 仍然以某种方式返回 0,会发生这种情况吗?
-
@lagbox 请阅读我上面的评论。
-
如果没有变化,可能会发生这种情况。所以如果 1002 存在,但名字已经是 x,那么就没有受影响的行。