Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 通过不同服务器的多数据库连接访问多对多关系的关系数据_Laravel_Laravel 5_Many To Many_Laravel 5.4_Laravel Eloquent - Fatal编程技术网

Laravel 通过不同服务器的多数据库连接访问多对多关系的关系数据

Laravel 通过不同服务器的多数据库连接访问多对多关系的关系数据,laravel,laravel-5,many-to-many,laravel-5.4,laravel-eloquent,Laravel,Laravel 5,Many To Many,Laravel 5.4,Laravel Eloquent,我正在使用不同服务器上的多个数据库连接。i、 e,host1和host2。我的默认数据库连接是host2。我的项目有两个表用户存在于主机1上而任务存在于主机2上 两个表上都存在多对多关系。此关系的数据透视表是主机2上存在的任务用户的数据透视表 我的模型文件在这里 User.php class User extends Authenticatable { protected $connection = 'host1'; public function tasks() {

我正在使用不同服务器上的多个数据库连接。i、 e,
host1
host2
。我的默认数据库连接是host2。我的项目有两个表
用户
存在于主机1上
任务
存在于主机2上

两个表上都存在
多对多
关系。此关系的数据透视表是主机2上存在的任务用户的数据透视表

我的模型文件在这里

User.php

class User extends Authenticatable
{

    protected $connection = 'host1';

    public function tasks()
    {
        return $this->belongsToMany(Task::class, 'task_users', 'user_id', 'task_id');
    }
}
class Task extends Model
{
    protected $connection = 'host2';

    public function users()
    {
        return $this->belongsToMany(User::class, 'task_users', 'task_id', 'user_id');
    }
}
class Task extend Model
{
    protected $connection = 'host2';

    public function users()
    {
        return $this->belongsToMany(User::class)->using(TaskUser::class);
    }
}
Task.php

class User extends Authenticatable
{

    protected $connection = 'host1';

    public function tasks()
    {
        return $this->belongsToMany(Task::class, 'task_users', 'user_id', 'task_id');
    }
}
class Task extends Model
{
    protected $connection = 'host2';

    public function users()
    {
        return $this->belongsToMany(User::class, 'task_users', 'task_id', 'user_id');
    }
}
class Task extend Model
{
    protected $connection = 'host2';

    public function users()
    {
        return $this->belongsToMany(User::class)->using(TaskUser::class);
    }
}
对于这个模型文件,当我试图获取任务的用户时,我会得到这个错误

找不到基表或视图:1146表“database_hosted_on_host1_server.task_users”不存在

这是我的控制器代码

$task = Task::find($taskId);
dd($task->users->toArray());
我也试过了。但只有当两个数据库都在同一台服务器上时,它才起作用

我还尝试从中定义自定义中间表模型。但还是有错误。我想我在pivot课上犯了一些错误

这是我的密码

Task.php

class User extends Authenticatable
{

    protected $connection = 'host1';

    public function tasks()
    {
        return $this->belongsToMany(Task::class, 'task_users', 'user_id', 'task_id');
    }
}
class Task extends Model
{
    protected $connection = 'host2';

    public function users()
    {
        return $this->belongsToMany(User::class, 'task_users', 'task_id', 'user_id');
    }
}
class Task extend Model
{
    protected $connection = 'host2';

    public function users()
    {
        return $this->belongsToMany(User::class)->using(TaskUser::class);
    }
}
TaskUser.php

class User extends Authenticatable
{

    protected $connection = 'host1';

    public function tasks()
    {
        return $this->belongsToMany(Task::class, 'task_users', 'user_id', 'task_id');
    }
}
class Task extends Model
{
    protected $connection = 'host2';

    public function users()
    {
        return $this->belongsToMany(User::class, 'task_users', 'task_id', 'user_id');
    }
}
class Task extend Model
{
    protected $connection = 'host2';

    public function users()
    {
        return $this->belongsToMany(User::class)->using(TaskUser::class);
    }
}
使用Illumb\Database\Elount\Relations\Pivot

class TaskUser extends Pivot
{
    protected $connection = 'host2';
    protected $table = 'task_users';
}
使用这段代码,当我试图获取任务的用户时,我得到了这个错误

找不到基表或视图:1146表“database_hosted_on_host1_server.task_user”不存在

在这两个代码中,关系表都被分配了host1连接(相关表即用户的连接)。但它存在于host2连接中。我的默认连接是host2


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

在您的模型上,尝试定义如下“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);
    }
}
以及您的pivot TaskUser.php

class TaskUser extends Pivot
{
    protected $table = 'host2.task_users';
}

好的。我从github上得到了答案。他说,不同连接上的多对多关系只能朝一个方向工作,而不能朝另一个方向工作。您可以在这里找到。

如果我按照您的答案进行更改,则会出现此错误<代码>找不到基表或视图:1146表“host2.tasks”不存在是否测试了数据库连接?我已测试了数据库连接。两者都是相互联系的。