Database 如何在laravel中使用数据库事务进行多连接?
我们正在开发一个多租户应用程序,为多个数据库使用两个单独的连接。用户模型使用主连接,角色使用租户连接。users表与roles表具有多对多关系,其中pivot表Role_User具有User_id和Role_id列。FK User_id引用主数据库中的users表。在user::create()和$newuser->roles->sync()上使用db事务;抛出错误。如何在多租户系统中实现数据库事务。感谢您的帮助Database 如何在laravel中使用数据库事务进行多连接?,database,laravel,transactions,multi-tenant,Database,Laravel,Transactions,Multi Tenant,我们正在开发一个多租户应用程序,为多个数据库使用两个单独的连接。用户模型使用主连接,角色使用租户连接。users表与roles表具有多对多关系,其中pivot表Role_User具有User_id和Role_id列。FK User_id引用主数据库中的users表。在user::create()和$newuser->roles->sync()上使用db事务;抛出错误。如何在多租户系统中实现数据库事务。感谢您的帮助 class User extends Authenticatable implem
class User extends Authenticatable implements JWTSubject
{
use Notifiable;
//use main connection
protected $connection = 'main';
public function roles()
{
return $this->belongsToMany('App\Models\Tenant\Role');
}
}
class Role extends Model
{
protected $connection = 'tenant';
}
//in UserController.php
DB::beginTransaction();
try {
$newUser = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => $request->password
]);
$rolesArray = $request->roles;
$newUser->roles()->sync($rolesArray);
DB::commit();
return response()->json(['status' => true, 'message' => 'successfull!!']);
} catch (Exception $e) {
DB::rollBack();
return response()->json(['status' => false, 'message' => 'internal Server Error!!']);
}
错误消息:“SQLSTATE[HY000]:一般错误:超过1205锁定等待超时;尝试重新启动事务(SQL:insert into
role\u user
(role\u id
,user\u id
)值(2,13)),这是超出正常雄辩用例的部分,当您超出正常用例时,雄辩会变得非常糟糕
要解决这个问题,首先需要在主数据库上创建一个用户,并创建一个服务或存储库来创建和检索tennant上的角色 您似乎遇到了中描述的问题
不幸的是,除了删除外键之外,没有什么简单的“解决方案”,不过,我正在探索使用PostgreSQL(而不是MySQL/MariaDB)时的变通方法,如果我发现更好的方法,我将更新这篇文章。您的数据库系统支持跨多个数据库的事务吗?根据您的设置,这可能是超出Laravel范围的问题。