CakePHP 3 - объединение данных в нескольких базах данных
Я пытаюсь получить некоторые данные из таблиц, которые существуют в двух отдельных базах данных. Кажется, ничего не работает - даже предложения из официальной документации.
Допустим, у нас есть две таблицы в двух базах данных:
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
ключ. Что мне нужно сделать, чтобы эта стратегия работала?