我試圖讓我的第一個查詢回傳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']);
});
uj5u.com熱心網友回復:
示例代碼周圍沒有很多背景關系,但一個非常基本的方法是這樣的:
$user = User::findorFail(1002);
$user->update(['name' => 'x']);
if ($user->wasChanged('name')) {
Post::where('user_id', 1)->update(['title' => 'New Title']);
}
因此,如果找不到模型,第一行將拋出例外。然后我們做一個更新。可以明確地說你是檢查0受影響的行,所以接下來我們使用的wasChanged()方法。它“確定在當前請求周期內最后一次保存模型時是否更改了任何屬性。” 如果是這種情況,我們將繼續進行下一次更新。
如果問題中顯示了更多代碼,還可以進行其他更改,例如,路由模型系結,但希望這是一個有用的開始。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/396408.html
上一篇:PHP8回傳靜態和引數型別
下一篇:Laravel包基礎關系模型
