Cake3:如何在不同数据库中用表建立belongsToMany关联?

时间:2019-06-30 19:37:12

标签: cakephp

使用旧式数据库,我必须处理以下结构: -database_a有一个表“ Articles” -database_b有两个表'Tags'和'ArticlesTags'

我将database_a配置为“默认”连接,将database_b配置为“第二”连接。然后,我烘焙了Articles,Tags模型以及ArticlesTags模型。对于标签模型和ArticlesTags模型,我添加了“ -c second”作为烘焙选项。尽管如此,关联仅部分被自动检测到,因此我不得不手动配置它们:在ArticlesTable和TagsTable中,我都将一个AboutToMany关联配置为Tag和。带有以下选项的文章:'trough'=>'ArticlesTags'。 在ArticlesTable中:

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';
    }

在akesTagsTable中,bake已经建立了两个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中的错误?

0 个答案:

没有答案