首页 > 解决方案 > 与不同数据库连接模型的 Eloquent 多对多关系

问题描述

我有两个模型,FirstModelSecondModel

FirstModel 的默认数据库连接为mysql并且SecondModel正在anotherMysql连接中。到目前为止,一切都很好:假设我尝试建立一个一对多的关系,它工作得很好。但是我需要一个多对多的关系,这是完全标准的,但是。

数据透视表firstModel_secondModel存在于mysql连接上(与 相同FirstModel)。

尝试像这样查询多对多关系:$firstModel->secondModels将导致错误,因为正在寻找SecondModel连接上的数据透视表。

所以我的问题是......我可以告诉 eloquent 在其他地方寻找数据透视表吗?有没有办法指定枢轴的连接?

标签: laraveleloquenteloquent-relationship

解决方案


正如@ersoy 指出的那样,有一个关于它的旧线程,我可以在其中找到答案。(我只是没有滚动足够长的时间并且没有按投票排序,因此我在第一次搜索时将其丢弃)。

这里的想法是,我们可以通过使用 mysql 的点表示法来指定要使用的连接。

因此:

public function FirstModel()
    {
        return $this->belongsToMany(SecondModel::class);
    }

只需要成为:

public function FirstModel()
    {
        $database = $this->getConnection()->getDatabaseName();
        return $this->belongsToMany(SecondModel::class, "$database.firstModel_secondModel");
    }

它有效!


推荐阅读