我正在尝试从存在于两个单独数据库中的表中检索一些数据。似乎没有什么工作 - 甚至是官方文件中的建议。
我们假设我们在两个数据库中有两个表:
db1 (default)
- orders
db2
- customers
如果我们使用不同的连接名称正确设置customers表:
class CustomersTable extends Table
{
public static function defaultConnectionName() {
return 'db2';
}
普通包含不起作用:
$this->Customers->find()
->contain(['Orders'])
->where(['Customers.id' => 12345]);
错误:SQLSTATE [42S02]:找不到基表或视图:1146表' db2.orders'不存在
编辑:这适用于Cake 3.1但不适用于3.3
Cake文档有一个关于changing the fetching strategy到select
的部分,它基本上只是为另一个数据库中的表运行一个单独的查询(无论如何都是一种无意义的解决方案)。
它似乎也无效:
$this->Customers->find()
->contain([
'Orders' => [
'strategy' => 'select',
'queryBuilder' => function ($q) {
return $q->select(['field1', 'field2', 'field3']);
}
]
])
->where(['Customers.id' => 12345]);
在这种情况下,查询的结果对象具有空的order
键。我需要做些什么才能使这个策略发挥作用?