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