2015-06-25 5 views

ответ

8

Ну, мой немедленный ответ на этот вопрос: нет. Скорее всего, вы можете выполнить свою задачу, изменив свою модель данных и работая с более продвинутыми отношениями. Трудно сказать, не зная, что вы хотите сделать, но мне кажется, что это плохая идея в целом, особенно если вы планируете использовать красноречивые модели и т. Д.

Это говорит о том, что в каком-то сценарии, где вам действительно нужно для изменения данных в другой базе данных или выполнения некоторого необработанного запроса вы можете использовать метод 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); 

Но опять же, я лично не думаю, что это хорошая идея, и мне кажется, что все может стать беспорядочным и развалиться очень быстро, так как ваше приложение растет по сложности.

+1

Спасибо за ваш ответ, я попытался изменить свойство 'connection' в методе модели, но используя метод' connection' на Фасад БД сделал трюк. Чтобы разработать допустимый прецедент: я создаю небольшую систему, которая проверяет правильность отображения всех данных. Это требование появилось, когда я получал бесплатные текстовые входы для пользователей и меня в конце отчета. Все данные приложения хранятся в базе данных MySQL, но мне нужно запросить SQL-сервер, чтобы проверить, не возникли ли проблемы с моими запросами в MySQL в процессе производства. – Ben

+0

Лично я против переключения соединений. И я не получаю идею проверки данных после их хранения, данные должны быть проверены перед хранением. –

+0

Спасибо, только за запись. Не только 'DB', но и' Schema' имеет функцию соединения, она работает так: 'Schema :: connection ('pgsql_admin') -> create (' –

4

Вы можете изменить параметры соединения во время выполнения с помощью

Config::set('database.connections.mysql.database', 'other_database'); 

, но не забудьте очистить перед тем, чтобы удалить кэш

DB::purge('mysql'); 
+0

Я потратил десять часов, пытаясь изменить базу данных по умолчанию во время выполнения. Что я забыл, так это метод DB :: purge(). –

0

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

public function inventory($db, $id) { 
    return DB::table($db . '.inventory')->where('inventoryid', $id)->get(); 
} 

, а затем, по коду, мы посылаем $ дб в качестве параметра:

$inventory = Inventory::inventory('data_2016', 2); 

Таким образом, вам не нужно, чтобы определить связь для каждой из разных баз данных и не возиться с файлами конфигурации базы данных.

Единственным недостатком является то, что вы не можете использовать модель напрямую, вместо этого вы должны использовать помощник DB.

Смежные вопросы