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

问题描述 投票:0回答:1

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

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

eloquent laravel-5.8
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();
 }
© www.soinside.com 2019 - 2024. All rights reserved.