我正在使用不同服務器上的多個數據庫連接。即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。
我幾乎花了太多的時間來解決這個問題。但沒有任何辦法。如果有人知道答案,將不勝感激。
如果我更改按你的答案我得到這個錯誤。 '基表或視圖未找到:1146表「host2.tasks」不exist' –
你測試你的數據庫連接? –
我過我的數據庫連接。兩者都連接。 –