我有一个应用程序,用户拥有自己的数据库。我正在创建一个包含关系的记录保存(因此更新了两个表),并且我想用DB::transaction()
包装执行。唯一的问题是数据库名称必须逐个更改用户。
$user->db_name
包含预期的数据,并且可以与其他选择查询一起很好地工作。
如果我这样做,它将失败,并显示Call to a member function beginTransaction() on null
DB::disconnect(config('database.default'));
Config::set('database.connections.mysql.database', $user->db_name);
DB::beginTransaction();
try {
.
.
$data1->create();
$data2->create();
DB::commit();
} catch (\Exception $e) {
DB::rollback();
}
如果我这样做并在第二个create语句上强制执行失败,它将把记录从第一个create保留在表中。
DB::beginTransaction();
try {
DB::disconnect(config('database.default'));
Config::set('database.connections.mysql.database', $user->db_name);
.
.
$data1->create();
$data2->create();
DB::commit();
} catch (\Exception $e) {
DB::rollback();
}
如何通过对用户数据库的故障回滚来实现数据库更改和事务?谢谢
答案 0 :(得分:0)
使用reconnect()
:
DB::reconnect(config('database.default'));
Config::set('database.connections.mysql.database', $user->db_name);
DB::beginTransaction();
try {
.
.
$data1->create();
$data2->create();
DB::commit();
} catch (\Exception $e) {
DB::rollback();
}