Laravel 5.8在每个用户的不同数据库上启动DB :: beginTransaction()

时间:2019-03-26 10:42:45

标签: eloquent laravel-5.8

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

如何通过对用户数据库的故障回滚来实现数据库更改和事务?谢谢

1 个答案:

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