ThinkPHP6中的事務操作

王雪芹
發布: 2020-06-23 13:28:37
原創
6431 人瀏覽過

事務操作對許多新人來說,可能有點陌生,即使看了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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!