我一直试图让这个工作,但它就是不工作。我有这个功能,我插入多个记录到不同的表在同一时间,我使用事务,但它不会回滚时,其中一个查询失败。
参见示例:
private function valBankInvestment($bank, $investment, $investment1, $data){
DB::beginTransaction();
$new_bank = DB::table('bank_accounts')->insert($bank);
$new_inv = Investments::create($investment);
$inv_log = DB::table('investment_logs')->insertGetId($investment1);
$trader = Traders::create($data);
if ($new_bank && $new_inv && $inv_log && $trader) {
DB::commit();
return true;
}
DB::rollBack();
return false;
}
我想实现的是,如果这些查询中的任何一个失败,上述函数应该回滚。请帮助我解决这个问题。
3条答案
按热度按时间wydwbb8l1#
为了回滚事务,您需要捕获异常。如果您不这样做,代码将退出而不调用它
mum43rcc2#
laravel中的rollback方法需要数据库中的表才能使用InnoDB引擎。Rollback方法不适用于MyISAM。您可以通过以下两种方式来实现:
首先,在数据库配置
config/database.php
中更改默认引擎,并更改为这一行;'engine' => 'InnoDB',
在您的mysql驱动程序连接.第二,在创建表时,在迁移中添加以下行;
nnsrf1az3#
@N69S的答案也是正确的,但我喜欢的方式,这是很容易阅读