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 ключ. Что мне нужно сделать, чтобы эта стратегия работала?

0 ответов

Другие вопросы по тегам