laravel - 与不同数据库连接模型的 Eloquent 多对多关系
问题描述
我有两个模型,FirstModel
和SecondModel
。
FirstModel 的默认数据库连接为mysql
并且SecondModel
正在anotherMysql
连接中。到目前为止,一切都很好:假设我尝试建立一个一对多的关系,它工作得很好。但是我需要一个多对多的关系,这是完全标准的,但是。
数据透视表firstModel_secondModel
存在于mysql
连接上(与 相同FirstModel
)。
尝试像这样查询多对多关系:$firstModel->secondModels
将导致错误,因为正在寻找SecondModel
连接上的数据透视表。
所以我的问题是......我可以告诉 eloquent 在其他地方寻找数据透视表吗?有没有办法指定枢轴的连接?
解决方案
正如@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");
}
它有效!
推荐阅读
- .net - 避免正则表达式平衡组移出括号
- java - 重命名文件并删除原始文件后如何在Java中删除图像?
- ubuntu - CMAKE 调用系统命令
- python - 试图解决没有这样的列:blog_comment.url
- python - 使用 venv 时出现 ModuleNotFoundError
- java - 获取 Apache PoolingHttpClientConnectionManager - 每个请求 - 连接和实际执行时间
- node.js - 错误:getaddrinfo ENOTFOUND Node JS 使用量角器
- macos - 如何获取和杀死进程Mac终端
- c# - 为什么我在使用 groupby LINQ 时会得到重复的键
- asp.net-core - 是否有任何内置管理器用于处理来自 ConfigurationDbContext(Clients, Resources...) 的表的 CRUD 操作?