首页 > 解决方案 > 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 中的错误?

标签: cakephp

解决方案


推荐阅读