Мне нужно изменить соединение базы данных laravel 5 во время выполнения.laravel Изменить время подключения к базе данных
У вас есть идеи?
Пожалуйста, поделитесь со мной.
Спасибо.
Мне нужно изменить соединение базы данных laravel 5 во время выполнения.laravel Изменить время подключения к базе данных
У вас есть идеи?
Пожалуйста, поделитесь со мной.
Спасибо.
Ну, мой немедленный ответ на этот вопрос: нет. Скорее всего, вы можете выполнить свою задачу, изменив свою модель данных и работая с более продвинутыми отношениями. Трудно сказать, не зная, что вы хотите сделать, но мне кажется, что это плохая идея в целом, особенно если вы планируете использовать красноречивые модели и т. Д.
Это говорит о том, что в каком-то сценарии, где вам действительно нужно для изменения данных в другой базе данных или выполнения некоторого необработанного запроса вы можете использовать метод 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);
Но опять же, я лично не думаю, что это хорошая идея, и мне кажется, что все может стать беспорядочным и развалиться очень быстро, так как ваше приложение растет по сложности.
Спасибо за ваш ответ, я попытался изменить свойство 'connection' в методе модели, но используя метод' connection' на Фасад БД сделал трюк. Чтобы разработать допустимый прецедент: я создаю небольшую систему, которая проверяет правильность отображения всех данных. Это требование появилось, когда я получал бесплатные текстовые входы для пользователей и меня в конце отчета. Все данные приложения хранятся в базе данных MySQL, но мне нужно запросить SQL-сервер, чтобы проверить, не возникли ли проблемы с моими запросами в MySQL в процессе производства. – Ben
Лично я против переключения соединений. И я не получаю идею проверки данных после их хранения, данные должны быть проверены перед хранением. –
Спасибо, только за запись. Не только 'DB', но и' Schema' имеет функцию соединения, она работает так: 'Schema :: connection ('pgsql_admin') -> create (' –
Вы можете изменить параметры соединения во время выполнения с помощью
Config::set('database.connections.mysql.database', 'other_database');
, но не забудьте очистить перед тем, чтобы удалить кэш
DB::purge('mysql');
Я потратил десять часов, пытаясь изменить базу данных по умолчанию во время выполнения. Что я забыл, так это метод DB :: purge(). –
Мы имеем подобный сценарий, где искать исторических данных, мы меняем базу данных. Мы используем следующие в модели:
public function inventory($db, $id) {
return DB::table($db . '.inventory')->where('inventoryid', $id)->get();
}
, а затем, по коду, мы посылаем $ дб в качестве параметра:
$inventory = Inventory::inventory('data_2016', 2);
Таким образом, вам не нужно, чтобы определить связь для каждой из разных баз данных и не возиться с файлами конфигурации базы данных.
Единственным недостатком является то, что вы не можете использовать модель напрямую, вместо этого вы должны использовать помощник DB.
Эта ссылка поможет http://fideloper.com/laravel-multiple-database-connections – imsheth