访问多对多关系的关系数据与不同服务器的多个数据库连接
问题描述:
我正在使用不同服务器上的多个数据库连接。即host1
和host2
。我的默认数据库连接是host2。我的项目有两个表格。 users
存在于主机1和tasks
存在于主机2上。访问多对多关系的关系数据与不同服务器的多个数据库连接
在两个表上都有many to many
关系。这个关系的枢轴表是task_users
它存在于host2上。
我的模型文件在这里。
user.php的
class User extends Authenticatable
{
protected $connection = 'host1';
public function tasks()
{
return $this->belongsToMany(Task::class, 'task_users', 'user_id', 'task_id');
}
}
Task.php
class Task extends Model
{
protected $connection = 'host2';
public function users()
{
return $this->belongsToMany(User::class, 'task_users', 'task_id', 'user_id');
}
}
有了这个模型文件,当我试图让一个任务的用户,我得到这个错误。
未找到基本表或视图:1146表'database_hosted_on_host1_server.task_users'不存在。
这是我的控制器代码
$task = Task::find($taskId);
dd($task->users->toArray());
我也曾尝试过this。但是它只在两个数据库都在同一台服务器上时才起作用
我也试过定义自定义中间表模型来自laravel documentation。但仍然出现错误。我认为我在枢轴课上犯了一些错误。
这是我的代码。
Task.php
class Task extend Model
{
protected $connection = 'host2';
public function users()
{
return $this->belongsToMany(User::class)->using(TaskUser::class);
}
}
TaskUser.php
使用照亮\数据库\雄辩\关系\枢轴;
class TaskUser extends Pivot
{
protected $connection = 'host2';
protected $table = 'task_users';
}
有了这段代码,当我试图让一个任务的用户,我得到这个错误。
未找到基本表或视图:1146表'database_hosted_on_host1_server.task_user'不存在。
在这两个代码中,关系表都被分配了host1连接(相关表即连接用户)。但它存在于host2连接中。而且我的默认连接是host2。
我几乎花了太多的时间来解决这个问题。但没有任何办法。如果有人知道答案,将不胜感激。
答
你的模型,试图定义 'connection.table' 是这样的:
user.php的
class User extends Authenticatable
{
protected $table = 'host1.users';
public function tasks()
{
return $this->belongsToMany(Task::class, 'task_users', 'user_id', 'task_id');
}
}
Task.php
class Task extend Model
{
protected $table = 'host2.tasks';
public function users()
{
return $this->belongsToMany(User::class)->using(TaskUser::class);
}
}
而且你的支点TaskUser.php
class TaskUser extends Pivot
{
protected $table = 'host2.task_users';
}
如果我更改按你的答案我得到这个错误。 '基表或视图未找到:1146表“host2.tasks”不exist' –
你测试你的数据库连接? –
我过我的数据库连接。两者都连接。 –