Я хочу изменить соединение базы данных laravel 5 с временем выполнения. У вас есть представление об этом. Пожалуйста, поделитесь со мной
Ну, мой немедленный ответ на это: не надо. Скорее всего, вы можете выполнить свою задачу, изменив свою модель данных и работая с более развитыми отношениями. Трудно сказать, не зная, что вы хотите сделать, но мне кажется, что это плохая идея в целом, особенно если вы планируете использовать красноречивые модели и так далее
Тем не менее, в каком-то сценарии, где вам действительно нужно изменить данные в другой базе данных или выполнить какой-то необработанный запрос, вы можете использовать метод DB::connection()
. Что-то вроде:
$data = DB::connection('another_connection')->select(...);
Вы можете указать эту переменную another_connection
в файле database.php
. Как это:
<?php return array( 'default' => 'mysql', 'connections' => array( # Your regular connection 'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'database', 'username' => 'user', 'password' => 'password' 'charset' => 'utf8', ), # Your new connection 'another_connection' => array( 'driver' => 'mysql', 'host' => 'another_host', 'database' => 'another_db', 'username' => 'user1', 'password' => 'password1' 'charset' => 'utf8', ), ), );
Вы можете даже указать соединение для каждой красноречивой модели, используя protected $connection = 'another_connection';
также вы можете указать соединение для каждого экземпляра модели, созданного / запрошенного во время выполнения
$user = new User; $user->setConnection('another_connection'); $user1 = $user->find(1);
Но опять же, я лично не думаю, что это хорошая идея, и мне кажется, что все может стать беспорядочным и развалиться очень быстро, так как ваше приложение растет по сложности.
Вы можете изменить данные о соединении во время выполнения, используя
Config::set('database.connections.mysql.database', 'other_database');
но не забудьте очистить до удаления кеша
DB::purge('mysql');