Получение связанной модели из другой базы данных с помощью cakephp 3


Я разрабатываю приложение, которое будет использовать две базы данных: основную базу данных для хранения данных приложения и вторую, где я буду проверять имена пользователей и другие материалы, доступные только для чтения. Поэтому я установил два разных соединения в своем приложении .php :

 'Datasources' => [
    'default' => [
        'className' => 'CakeDatabaseConnection',
        'driver' => 'CakeDatabaseDriverMysql',
        'persistent' => false,
        'host' => '192.168.2.31',
        'username' => 'srddev',
        'password' => 'srddev',
        'database' => 'srddev',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,
        'log' => false,
        'quoteIdentifiers' => false,
    ],
'spd' => [
        'className' => 'CakeDatabaseConnection',
        'driver' => 'CakeDatabaseDriverMysql',
        'persistent' => false,
        'host' => '192.168.2.31',
        'username' => 'spddev',
        'password' => 'spddev',
        'database' => 'spddev',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,
        'log' => false,
        'quoteIdentifiers' => false,
    ],

После этого я помещаю метод в мою Модель/таблицу/UsersTable.php таким образом, cake будет знать, что эта таблица использует другую базу данных:

 public static function defaultConnectionName() {
     return 'spd';
   }

Я использую эту таблицу для аутентификации пользователей, она работает нормально. Но теперь я хочу этого. свяжите эту модель с моей моделью "pedidos" (заказов), из моей основной базы данных, и она не работает нормально. Я пытаюсь это сделать в своем PedidosController.php :

 public function index()
{
    $this->paginate = [
        'contain' => ['Users']
    ];
    $this->set('pedidos', $this->paginate($this->Pedidos));
    $this->set('_serialize', ['pedidos']);
}

Но это не работает. Я получаю следующую ошибку: Ошибка: SQLSTATE[42S02]: базовая таблица или представление не найдено: 1146 таблица 'srddev.пользователей не существует

Ну, я не должен искать эту таблицу в базе данныхsrddev , она принадлежитspddev , Как я сигнализировал в своей UsersTable.РНР. Как можно Я говорю cakephp, что эта таблица должна запрашиваться в другом соединении?

ПС.: Обе "базы данных" на самом деле являются схемами на одном и том же сервере mysql. Я попытался подключиться к spddev.таблица пользователей с использованием соединения по умолчанию и настройкой $this - > table ('spddev.пользователей"); , но успеха не имел.

1 2

1 ответ:

Вы можете попробовать установить strategy в ассоциации на select. Это может помочь. Полной поддержки ассоциаций кросс-схем пока нет. Я приложил к этому некоторые усилия, но это не решит всех дел.

Я не уверен, в какой версии CakePHP 3 он был объединен, но я рекомендую оставаться в курсе циклов выпуска.