事務操作對許多新人來說,可能有點陌生,即使看了ThinkPHP6官方手冊中事務操作的部分,也仍然不知所解。下面就跟大家介紹下事務操作。
一、先說說使用場景。
假設我需要給朋友轉帳1,000元錢,正常的業務邏輯是:
1、銀行從我的帳戶中扣除1,000元
#2、銀行給朋友帳戶加上1000元。
如果一切順利,則轉帳成功!
那麼問題來了,如果我不小心把銀行帳戶輸錯,導致銀行查找不到我輸入的銀行帳戶,但是這個時候錢已經從我的帳戶扣除了,如何處理呢?
我們生活中經常說“如果錢打不過去,銀行會退回來的”,就是這個意思。
2、事務操作定義。
那麼透過上面的例子,我們理解下到底什麼是事務操作,事務指的是邏輯上的一組操作,組成這組操作的各個單元要么全都成功,要么全都失敗。
就如上面的打錢例子,要嘛打錢成功,如果不成功,需要把我的錢退回來,也就是回到初始狀態,也叫做「回滾」。
3、ThinkPHP6中的交易操作。
我們了解交易操作的使用場景,那麼在ThinkPHP6中如何使用呢?
Db::transaction(function () { Db::table('think_user')->insert(['name'=>'aaa']); Db::table('think_user')->delete(1); });
我們看上面的例子,只有當我們插入記錄成功的時候才會做刪除操作,如果插入不成功,不會做刪除操作。
例如我們故意寫錯一個字段name1,資料表中沒有name1該字段,插入程式不會執行成功,那麼下面的刪除語句沒有問題,但是他仍然不會執行。
除此之外,我們還可以手動控制交易。看下面程式碼:
// 启动事务 Db::startTrans(); try { Db::table('think_user')->find(1); Db::table('think_user')->delete(1); // 提交事务 Db::commit(); } catch (\Exception $e) { // 回滚事务 Db::rollback(); }
以上就是ThinkPHP6中的事務操作的內容,透過咱們實際生活中的例子講解,大家對事務操作就可以很好的理解了。
以上是ThinkPHP6中的事務操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!