laravel的坑(事務(wù),主從分離等)

其實(shí)也不算坑,只是在官方文檔中未提及或開發(fā)過(guò)程中本人未注意到的點(diǎn)
1.多數(shù)據(jù)庫(kù)使用事務(wù)的坑(model指定了$connection,用的是/config/database.php里的連接)
使用DB::beginTransaction()是沒(méi)有效果的,相當(dāng)于未使用事務(wù),必須指定連接,事務(wù)才能生效
DB::connection('連接名')->beginTransaction();
DB::connection('連接名')->rollback();
DB::connection('連接名')->commit();

2.主從分離中事務(wù)的坑
在事務(wù)開始直到結(jié)束這一過(guò)程中,所有的查詢更新刪除操作都作用在主庫(kù),所以不必?fù)?dān)心在事務(wù)中的查詢會(huì)查詢到從庫(kù),也沒(méi)必要在事務(wù)中為了查詢主庫(kù)而使用onWriteConnection;
未使用事務(wù)的地方,想要讀主庫(kù)的數(shù)據(jù),可以使用onWriteConnection: Table::onWriteConnection()->find($id);

3.increment與decrement的坑
$rs1 = Order::find(41)->decrement('shipping_fee', 0);
echo '$rs1 = '.$rs1.' ';
$rs2 = Order::find(41)->decrement('order_amount', 0);
echo '$rs2 = '.$rs2.' ';
運(yùn)行結(jié)果:$rs1 = 1 $rs2 = 0
原因分析:查看這兩行代碼執(zhí)行的真實(shí)sql語(yǔ)句:
update orders set shipping_fee = shipping_fee - 0, updated_at = '2017-08-03 10:10:25' where id = '41'
update orders set order_amount = order_amount - 0, updated_at = '2017-08-03 10:10:25' where id = '41'
結(jié)論:因?yàn)槭褂昧薼aravel時(shí)間自動(dòng)更新的功能,而且更新的是同一條數(shù)據(jù),updated_at為最新時(shí)間,第一條語(yǔ)句執(zhí)行返回條數(shù)1,而第二條的updated_at跟第一條一樣,返回的更新條數(shù)就為0了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容