如何在 CakePHP 中设置关联 table 的连接

How to set the connection of associated table in CakePHP

我实际上有 2 个数据库,一个名为 clientDefaultDbclient1Db。 这是协会的代码。

ProductsController

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

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

这里我们把table的连接设置为Client1Db 我用 ProductUnits

调用 contain

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'
            ]);

    }

return没有错误。 它正确地获取了产品并有一些数据,但问题是 ProductUnits 没有数据,它是空的。

我试过手动直接查询数据库吧return东西。 尝试在 Client1Db 复制 ProductUnits 的数据然后将其粘贴到 clientDefaultDb 然后我再次尝试 运行 代码,然后 ProductUnits return我被复制的数据。 所以可能所有相关联的 table 都精确地连接到默认数据库。 那么如何更改关联 tables 的默认连接?

在相关模型上使用 Table::setConnection()

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

我成功了。感谢@burzum 的想法。

这是代码。

$this->loadModel('ProductUnits'); 
$connection = ConnectionManager::get('client1Db'); 
$this->ProductUnits->setConnection($connection);