【发布时间】:2017-08-19 05:34:29
【问题描述】:
我正在不同服务器上处理多个数据库连接。即host1 和host2。我的默认数据库连接是 host2。我的项目有两张桌子。 users 存在于 host1 和 tasks 存在于 host2。
两个表上都有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
使用 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。
我几乎花了太多时间来解决这个问题。但是没有办法。如果有人知道答案,将不胜感激。
【问题讨论】:
标签: laravel laravel-5 many-to-many laravel-5.4 laravel-eloquent