0

我有一个应用程序,用户拥有自己的数据库。我正在创建一个包含关系的记录保存(因此更新了两个表),我想用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();
 }

如果我这样做并在第二个创建语句上强制失败,它会将第一次创建的记录保留在表中。

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();
 }

如何在针对用户数据库的故障回滚的情况下实现数据库更改和事务?谢谢

4

1 回答 1

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();
 }
于 2019-04-01T03:30:39.870 回答