2

我正在使用不同服務器上的多個數據庫連接。即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。

我幾乎花了太多的時間來解決這個問題。但沒有任何辦法。如果有人知道答案,將不勝感激。

回答

0

好。我在GitHub上得到了答案從themsaid。他說,許多人在不同的連接許多關係將在1點的方向而不是其他的工作。在這裏您可以找到github issue

1

你的模型,試圖定義 '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

我過我的數據庫連接。兩者都連接。 –