Я работаю с несколькими подключениями к базе данных на разных серверах. то есть 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());
Я также пробовал это. Но это работает, только если обе базы данных находятся на одном сервере.
Я также пробовал Определение пользовательских моделей промежуточных таблиц из документация laravel. Но все еще получаю ошибку. Я думаю, что делаю какую-то ошибку в сводном классе.
Вот мой код.
Task.php
class Task extend Model
{
protected $connection = 'host2';
public function users()
{
return $this->belongsToMany(User::class)->using(TaskUser::class);
}
}
TaskUser.php
используйте Illuminate\Database\Eloquent\Relations\Pivot;
class TaskUser extends Pivot
{
protected $connection = 'host2';
protected $table = 'task_users';
}
С помощью этого кода, когда я пытаюсь привлечь пользователей к задаче, я получаю эту ошибку.
Базовая таблица или представление не найдены: 1146 Таблица 'database_hosted_on_host1_server.task_user' не существует.
В обоих кодах реляционная таблица назначается с подключением к host1 (подключение связанной таблицы, то есть пользователей). Но он существует в соединении host2. А также мое соединение по умолчанию — host2.
Я почти потратил слишком много времени, чтобы решить эту проблему. Но никак не получалось. Если кто знает ответ, буду признателен.