CakePHP 3 - 跨多个数据库连接数据

时间:2017-06-13 10:10:07

标签: php cakephp cakephp-3.x cakephp-3.3

我正在尝试从存在于两个单独数据库中的表中检索一些数据。似乎没有什么工作 - 甚至是官方文件中的建议。

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

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 strategyselect的部分,它基本上只是为另一个数据库中的表运行一个单独的查询(无论如何都是一种无意义的解决方案)。

它似乎也无效:

$this->Customers->find()
    ->contain([
        'Orders' => [
            'strategy' => 'select',
            'queryBuilder' => function ($q) {
                return $q->select(['field1', 'field2', 'field3']);
            }
        ]
    ])
    ->where(['Customers.id' => 12345]);

在这种情况下,查询的结果对象具有空的order键。我需要做些什么才能使这个策略发挥作用?

0 个答案:

没有答案