Laravel很多很多数据透视表不同的数据库

时间:2018-02-02 13:15:00

标签: php laravel laravel-5

Laravel 5.5

我有两个型号,用户对话

用户对话是一种多对多的关系(双向)。

我的表格结构如下:

conversation is on database_1
conversation_user is on database_1
user is on database_2

Inside App \ Conversation.php:

protected $connection = 'database_1';
protected $table = 'conversations';
public function users()
{
    return $this->belongsToMany("App\User");
}

Inside App \ User.php:

protected $connection = 'database_2';
protected $table = 'users';
public function conversations()
{
    return $this->belongsToMany("App\Conversation");
}

所有这些都在同一台服务器上,但有没有办法让它工作?

在查询Conversation上的关系以获取用户时,它正在寻找database_2.conversation_user而不是database_1.conversation_user

所以从本质上讲,我需要说数据透视表位于database_1中,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:5)

解决此问题的一种方法是使用查询构建器来创建关系。在您的用户模型中尝试:

public function conversations()
{
    return DB::connection('db1_connection_name')->table('conversation_user')->where('user_id', $this->id)->get();
}

显然,您也可以在关系中为连接添加前缀:

public function conversations() {
    return $this->belongsToMany(User::class, env('DB_CONNECTION_1').'.conversation_user', 'user_id', 'conversation_id');
 }