cakephp - Cake3:如何与不同数据库中的表建立belongsToMany关联?
问题描述
使用旧数据库时,我必须处理以下结构: - database_a 有一个表“Articles” - database_b 有两个表“Tags”和“ArticlesTags”
我将 database_a 配置为“默认”连接,将 database_b 配置为“第二个”连接。然后我为 Articles、Tags 和 ArticlesTags 模型烘焙模型。对于标签模型和 ArticlesTags 模型,我添加了“-c second”作为烘焙选项。尽管如此,关联只是部分自动检测到,因此我必须手动配置它们:在 ArticlesTable 和 TagsTable 中,我分别配置了一个 belongsToMany 关联到标签。到带有选项的文章:'trough' => 'ArticlesTags'。在文章表中:
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('articles');
$this->setDisplayField('name');
$this->setPrimaryKey('id');
$this->belongsToMany('Tags', [
'through' => 'ArticlesTags'
]);
}
在标签表中:
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('tags');
$this->setDisplayField('name');
$this->setPrimaryKey('id');
$this->belongsToMany('Articles', [
'through' => 'ArticlesTags'
]);
}
public static function defaultConnectionName()
{
return 'second';
}
在ArticlesTagsTable 中烘焙确实已经为Tags 和Articles 设置了两个belongsTo 关联。在 ArticlesTagsTable 和 TagsTable 中,defaultConnection 也被正确设置为“second”:
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('articles_tags');
$this->belongsTo('Tags', [
'foreignKey' => 'tag_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Articles', [
'foreignKey' => 'article_id',
'joinType' => 'INNER'
]);
}
public static function defaultConnectionName()
{
return 'second';
}
现在的问题:当获取带有相关标签的文章时,erverythig 是可以的。但是当我尝试使用相关文章获取标签时,我收到一个 SQL 错误“表 'database_a.articles_tags' 不存在”,这是真的,因为表articles_tags 不在database_a 中,而是在database_b 中。
如何获取标签的相关文章?我是不是错过了什么。配置?或者这可能是 ORM 中的错误?
解决方案
推荐阅读
- javascript - 如何在 div 中将 svg 元素设置为背景图像?
- windows - 如何在 git-bash 中使用名称启动 Windows 进程
- java - 为什么我会收到这种错误?非法字符
- java - 如何修复 POST 请求 Retrofit 上的错误 400
- jquery - jQuery.countdown 完成后显示隐藏内容
- python - 常量类实例是 PEP8 命名约定的例外吗?
- javascript - 如何在点击事件监听器中获取按钮的值
- javascript - 如何修复:拖动的元素未显示
- spring - 如何获取地图并将其用作spring-boot中的值
- r - 在 dplyr 的 mutate 中使用散列键值对