2

我正在尝试从存在于两个单独数据库中的表中检索一些数据。似乎没有任何效果 - 即使是官方文档中的建议。

假设我们在两个数据库中有两个表:

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键。我需要做什么才能让这个策略发挥作用?

4

0 回答 0