Cake3: Как настроить принадлежащую ToMany ассоциацию с таблицами в разных базах данных? - PullRequest
0 голосов
/ 30 июня 2019

Работая с устаревшей базой данных, мне приходится иметь дело со следующей структурой: - база данных_a имеет таблицу «Статьи» - database_b содержит две таблицы 'Tags' и 'ArticlesTags'

Я настроил database_a как соединение по умолчанию, а database_b как второе соединение. Затем я испекла модели для статей, тегов, а также модель статей. Для модели Tags и модели ArticlesTags я добавил опцию -c second в качестве опции выпекания. Тем не менее, ассоциации были обнаружены только частично, поэтому мне пришлось настраивать их вручную: как для ArticlesTable, так и для TagsTable я настроил ассоциацию ownToMany для тегов, соответственно. к статьям с опцией: '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';
    }

В разделе ArticlesTagsTable уже были созданы две ассоциации, относящиеся к тегам и статьям. В 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 »не существует», которое имеет значение true, поскольку таблица article_tags находится не в database_a, а в database_b.

Как я могу получить соответствующие статьи тега? Я скучал по чему-то? настроить? Или это может быть ошибка в ORM?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...