ThinkPHP6中的事務(wù)操作

事務(wù)操作對(duì)很多新人來(lái)說(shuō),可能有點(diǎn)陌生,即使看了thinkphp6官方手冊(cè)中事務(wù)操作的部分,也仍然不知所解。下面就給大家介紹下事務(wù)操作。

一、先說(shuō)說(shuō)使用場(chǎng)景。

假設(shè)我需要給朋友轉(zhuǎn)賬1000元錢(qián),正常的業(yè)務(wù)邏輯是:

1、銀行從我的賬戶(hù)中扣除1000元??

2、銀行給朋友賬戶(hù)加上1000元。

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

如果一切順利,則轉(zhuǎn)賬成功!

那么問(wèn)題來(lái)了,如果我不小心把銀行賬戶(hù)輸錯(cuò),導(dǎo)致銀行查找不到我輸入的銀行賬戶(hù),但是這個(gè)時(shí)候錢(qián)已經(jīng)從我的賬戶(hù)扣除了,如何處理呢?

我們生活中經(jīng)常說(shuō)“如果錢(qián)打不過(guò)去,銀行會(huì)退回來(lái)的”,就是這個(gè)意思。

2、事務(wù)操作定義。

那么通過(guò)上面的例子,我們理解下到底什么是事務(wù)操作,事務(wù)指的是邏輯上的一組操作,組成這組操作的各個(gè)單元要么全都成功,要么全都失敗。

就如上面的打錢(qián)例子,要么打錢(qián)成功,如果不成功,需要把我的錢(qián)退回來(lái),也就是返回到初始狀態(tài),也叫做“回滾”。

3、ThinkPHP6中的事務(wù)操作。

我們理解了事務(wù)操作的使用場(chǎng)景,那么在ThinkPHP6中如何使用呢?

Db::transaction(function?()?{ ????Db::table('think_user')->insert(['name'=>'aaa']); ????Db::table('think_user')->delete(1); });

我們看上面的例子,只有當(dāng)我們插入記錄成功的時(shí)候才會(huì)做刪除操作,如果插入不成功,不會(huì)做刪除操作。

比如我們故意寫(xiě)錯(cuò)一個(gè)字段name1,數(shù)據(jù)表中沒(méi)有name1該字段,插入程序不會(huì)執(zhí)行成功,那么下面的刪除語(yǔ)句沒(méi)有問(wèn)題,但是他依然不會(huì)執(zhí)行。

除此之外,我們還可以手動(dòng)控制事務(wù)。看下面代碼:

//?啟動(dòng)事務(wù) Db::startTrans(); try?{ ????Db::table('think_user')->find(1); ????Db::table('think_user')->delete(1); ????//?提交事務(wù) ????Db::commit(); }?catch?(Exception?$e)?{ ????//?回滾事務(wù) ????Db::rollback(); }

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊9 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員