如何在 CakePHP 中设置关联 table 的连接
How to set the connection of associated table in CakePHP
我实际上有 2 个数据库,一个名为 clientDefaultDb
和 client1Db
。
这是协会的代码。
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);
我实际上有 2 个数据库,一个名为 clientDefaultDb
和 client1Db
。
这是协会的代码。
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);