Я пытаюсь изменить соединение с базой данных, используемое в cakephp 3 на лету. Каждый ответ на этот вопрос, который я нашел, относится к cakephp 2 ( эти три, например).
Этот парень нашел решение для cakephp 3, имеющее конечное количество баз данных, и конкретно определив, какая база данных будет использоваться в файле таблицы.
Дело в том, что я хочу создать новую базу данных для каждого нового пользователя и перейти к своей базе данных при входе в систему. Я не могу заранее знать все базы данных, которые будут существовать, чтобы записать их в config/app.php
файл.
И я не могу установить базу данных по умолчанию в каждом файле / src / Model / Table, потому что таблицы одинаковы в каждой базе данных.
Используйте функцию ConnectionManager::config()
для создания соединений «на лету» и метода ConnnectionManager::alias()
чтобы по умолчанию использовать все ваши классы таблиц.
Здесь очень хорошая статья, описывающая этот процесс:
http://mark-story.com/posts/view/using-cakephp-and-a-horizontally-sharded-database
Единственное различие заключается в том, что вы можете создать конфигурацию соединения на лету вместо того, чтобы объявлять осколки вручную, как это было показано в этой статье.
Изменить подключение базы данных для одной модели:
В app.php:
'test' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => MySQL_HOST, //'port' => 'nonstandard_port_number', 'port' => MySQL_PORT, 'username' => MySQL_USER, 'password' => MySQL_PASS, 'database' => 'test', 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, 'quoteIdentifiers' => false, 'log' => false, //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], ]