我有一个用户拥有自己的数据库的应用程序。我正在创建一个包含关系的记录保存(因此更新了两个表),我想用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();
}
如何通过针对用户数据库的故障回滚来实现数据库更改和事务?谢谢
使用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();
}