第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Laravel 5.1 跨多個 Eloquent 模型進行交易

使用 Laravel 5.1 跨多個 Eloquent 模型進行交易

PHP
POPMUISE 2023-05-26 17:24:26
我想將一個父項及其所有子項插入數(shù)據(jù)庫。如果任何孩子無法創(chuàng)建,我想中止整個交易。我試過使用以下代碼片段:DB::beginTransaction();try{    // Create parent item    $one = new ModelOne();    $one->key = 'Parent Key';    $one->title = 'Parent title';    $one->save();    // Create child items    foreach ($items as $item) {        $two = new ModelTwo();        $two->parent_id = $one->id;        $two->content = $item->content;        $two->status = $item->status;        $two->save();    }    DB::commit();    return response(['message'=>'ALL GOOD'], 200);}catch (\ Illuminate\Database\QueryException $e){    DB::rollBack();    return response(['message'=>'FAILURE'], 500);}然而,當(dāng)拋出異常時(比如因為一個鍵在孩子之間重復(fù))ModelOne($one)被保存在數(shù)據(jù)庫中,即使DB::commit()從未被調(diào)用。我錯過了什么?我正在使用 Laravel 5.1。
查看完整描述

2 回答

?
汪汪一只貓

TA貢獻1898條經(jīng)驗 獲得超8個贊

原來這個問題與我在問題中提供的代碼無關(guān)。

問題是我的表是使用MyISAM不支持事務(wù)創(chuàng)建的。

使用InnoDBinstead 使代碼按預(yù)期工作。為此,請?zhí)砑?code>$table->engine = 'InnoDB';到您的遷移中。


查看完整回答
反對 回復(fù) 2023-05-26
?
翻過高山走不出你

TA貢獻1875條經(jīng)驗 獲得超3個贊

我將此代碼用于交易并且它有效:


DB::transaction(function () { 

});

使用此代碼,您無需提交或回滾。它們被自動調(diào)用。


在您的情況下,您將擁有:


try {

    DB::transaction(function () use ($items) ({ 

        // ... your inserts

    });

catch () {}


查看完整回答
反對 回復(fù) 2023-05-26
  • 2 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號