访问多对多关系的关系数据与不同服务器的多个数据库连接

问题描述:

我正在使用不同服务器上的多个数据库连接。即host1host2。我的默认数据库连接是host2。我的项目有两个表格。 users存在于主机1tasks存在于主机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。

我几乎花了太多的时间来解决这个问题。但没有任何办法。如果有人知道答案,将不胜感激。

好。我在GitHub上得到了答案从themsaid。他说,许多人在不同的连接许多关系将在1点的方向而不是其他的工作。在这里您可以找到github issue

你的模型,试图定义 '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'; 
} 
+0

如果我更改按你的答案我得到这个错误。 '基表或视图未找到:1146表“host2.tasks”不exist' –

+0

你测试你的数据库连接? –

+0

我过我的数据库连接。两者都连接。 –