Как установить соединение связанной таблицы в CakePHP - PullRequest
0 голосов
/ 01 ноября 2019

На самом деле у меня есть 2 базы данных, одна из которых называется clientDefaultDb и client1Db. Вот код ассоциации.

ProductsController

    $connection = ConnectionManager::get('client1Db');
    $productSource = TableRegistry::get('Products', ['connection' => 
             $connection]);

    $products = $productSource->find('all');
    $products->contain(['ProductUnits']);

Здесь мы устанавливаем соединение таблицы на Client1Db, и я вызываю contain с ProductUnits

ProductTable.php

    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->setTable('products');
        $this->setDisplayField('name');
        $this->setPrimaryKey('id');

        $this->addBehavior('Timestamp');

        $this->hasMany('ProductUnits')
            ->setForeignKey([
                'item_code'
            ])
            ->setBindingKey([
                'item_code'
            ]);

    }

В возвращении нет ошибок. Он правильно выбрал продукт и имеет некоторые данные, но проблема в том, что в ProductUnits нет данных, он пуст.

Я пытался вручную запросить напрямую к базе данных, что-то вернуть. Попытался скопировать данные ProductUnits в Client1Db, затем вставить их в clientDefaultDb, затем я снова попытался запустить код, и ProductUnits вернул данные, которые я скопировал. так что, вероятно, все связанные таблицы по-разному связаны с базой данных по умолчанию. Итак, как я могу изменить подключение по умолчанию для связанных таблиц?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Мне удалось заставить его работать. Спасибо @burzum за идею.

вот код.

$this->loadModel('ProductUnits'); 
$connection = ConnectionManager::get('client1Db'); 
$this->ProductUnits->setConnection($connection); 
0 голосов
/ 02 ноября 2019

Используйте Table :: setConnection () на связанных моделях.

$this->SomeAssoc->setConnection(/* connection here */);
...