we are developing a multi tenant application using 2 separate connections for multiple databases. User model uses main connection and Role uses tenant connection .users table has many to many relationship to roles table with pivot table role_user having columns user_id and role_id .FK user_id references users table from main database. using db transaction on user::create() and $newuser->roles->sync(); throws error. how to implement db transaction in multi-tenant system. Any help is appreciated.
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!!']);
}
Error message : "SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction (SQL: insert into role_user
(role_id
, user_id
) values (2, 13))",