我正在尝试从存在于两个单独数据库中的表中检索一些数据。似乎没有任何效果 - 即使是官方文档中的建议。
假设我们在两个数据库中有两个表:
db1 (default)
- orders
db2
- 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 文档中有一个关于将获取策略更改为的部分select
,这基本上只是对另一个数据库中的表运行单独的查询(无论如何,这是一种毫无意义的解决方案)。
它似乎也不起作用:
$this->Customers->find()
->contain([
'Orders' => [
'strategy' => 'select',
'queryBuilder' => function ($q) {
return $q->select(['field1', 'field2', 'field3']);
}
]
])
->where(['Customers.id' => 12345]);
在这种情况下,查询的结果对象有一个空order
键。我需要做什么才能让这个策略发挥作用?