PHP版本:8.1.22
反復(fù)嘗試過無法使用事務(wù)
貼出代碼:
Db::beginTransaction();
try {
User::where('id', 14)->update(['integral' => 1]);
// Db::table('back_user_list')->where('id', 14)->update(['integral' => 1]);
throw new \Exception('err');
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return false;
}
當我使用user模型更新時,他無論如何都會更新數(shù)據(jù)
但是用Db插入的時候卻可以攔截,沒有更新數(shù)據(jù),這就很奇怪了,我在用laravel的時候這樣子寫是沒有問題的,有大神能說一下時啥問題嗎?
應(yīng)該模型 User 和 Db用的不是同一個Mysql連接,所以不生效。
Db::connectin('User模型所用的鏈接')->beginTransaction();
這樣指定連接去執(zhí)行事務(wù),laravel實際上也要注意這個地方,只不過laravel一般配置一個數(shù)據(jù)庫連接,不用指定。
直接上圖,測試過沒問題,是數(shù)據(jù)庫鏈接問題,可以為Model創(chuàng)建一個Base類,Base類用$connection指定數(shù)據(jù)庫連接(就是你開啟事務(wù)的數(shù)據(jù)庫鏈接)
你說的對 我在公用的base寫了 // protected $connection = 'plugin.api.mysql'; 這個沒有注釋掉導(dǎo)致的不生效 本來應(yīng)該操作admin.mysql的 但是base的卻是指向了api,雖然是同一個數(shù)據(jù)庫配置,但是就導(dǎo)致了事務(wù)失效了,已經(jīng)注釋了,可以直接用,不需要指定配置了