簡體   English   中英

MySQL 事務不回滾 0 個受影響的行 - Laravel

[英]MySQL Transaction doesn't rollback with 0 affected rows - Laravel

我試圖讓我的第一個查詢返回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']);
});

您的示例代碼周圍沒有很多上下文,但一個非常基本的方法是這樣的:

$user = User::findorFail(1002);
$user->update(['name' => 'x']);
if ($user->wasChanged('name')) {
    Post::where('user_id', 1)->update(['title' => 'New Title']);
}

因此,如果未找到 model,則第一行將引發異常。 然后我們進行更新。 您明確表示您正在檢查 0 個受影響的行,因此接下來我們使用wasChanged()方法 它“確定在當前請求周期內上次保存 model 時是否更改了任何屬性。” 如果是這種情況,我們將繼續進行下一次更新。

如果問題中顯示了更多代碼,則可以進行其他更改,例如路由 model 綁定,但希望這是一個有用的開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM