【发布时间】:2019-11-25 10:52:24
【问题描述】:
我们正在开发一个多租户应用程序,使用 2 个独立的连接连接多个数据库。用户模型使用主连接,角色使用租户连接。用户表与角色表具有多对多关系,其中透视表 role_user 具有列 user_id 和 role_id .FK user_id 引用主数据库中的用户表。在 user::create() 和 $newuser->roles->sync() 上使用数据库事务;抛出错误。如何在多租户系统中实现数据库事务。任何帮助表示赞赏。
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:插入role_user(role_id,user_id)值(2、13))”,
【问题讨论】:
-
您的数据库系统是否支持跨多个数据库的事务?根据您的设置,这可能是 Laravel 范围之外的问题。
标签: database laravel transactions multi-tenant