首頁  >  文章  >  php框架  >  ThinkPHP6中的事務操作

ThinkPHP6中的事務操作

王雪芹
王雪芹原創
2020-06-23 09:28:596555瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn