Laravel: работа с большим количеством разных БД на удалённых серверах. Как?

Небольшое предисловие — есть множество сайтов-сервисов, практически одинаковых, с единой структурой БД. Всё это дело написано на Yii 1.x, теперь переписываем на Laravel, и будем использовать только Laravel — такие условия. У каждого такого сайта своя админка, через которую происходит редактирование информации. Это терпимо, когда сайтов меньше 10, но эта цифра давно перешагнула 100.

Так вот. Сейчас стоит вопрос о том, как организовать единую админку для всех сайтов. Смысл очень простой — заходим в админку и видим список всех сайтов(мы их предварительно туда добавляем, с указанием сервера MySQL). По клику по любому сайту, нам предлагают ввести логин и пароль от БД(который конечно же не сохраняется). После чего перед нами обычная админка.

Теперь вопрос — как это реализовать в Laravel? Как динамически создавать удалённые подключения из кода и работать с ними? Посоветуйте что-нибудь, пожалуйста.
  • Вопрос задан
  • 5862 просмотра
Решения вопроса 1
reffy
@reffy Автор вопроса
Я молодец.
Всё оказалось довольно просто.

Во первых, создаём новый конфиг:
$conn = array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'DATABASE',
    'username'  => 'USERNAME',
    'password'  => 'SOME_PASSWORD',
    'charset'   => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix'    => '',
);

Config::set('database.connections.DB_CONFIG_NAME', $conn);


Затем можем работать с удалённой базой данных:
MODEL::on('DB_CONFIG_NAME')->find(1);

// чтобы не указывать постоянно on('DB_CONFIG_NAME')
// мы можем указать через какой конфиг подключаемся
// в самой моделе
class Page extends Eloquent
{
	// через переменную $connection
	protected $connection = 'DB_CONFIG_NAME';

	// либо в конструкторе
	function __construct()
	{
		$this->connection = 'DB_CONFIG_NAME';
	}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
курите в сторону тамошнего IoC, который разруливает параметры для подключений. Можно добавлять в сессию какой параметр, который определяет с каакой БД мы хотим работать, и ловить это дело перед обработкой запроса, переключая базы данных.

Все очень зависит от архитектуры приложения, но суть примерно та же.

Еще вариант - в конфиге прописать все варианты подключений и через тот же IoC выбирать нужное и ставить его как по умолчанию.
Ответ написан
Serhioromano
@Serhioromano
Web Developer
Как я понимаю вы будете добалять сайты. Значит хранится они будут где то в базе данных. Там же сохраните и даные для подключения. И когда сайт выбран просто инициализируйте это подключение.

Или можно создать все подключения в файле конфикурации подключений, дать каждому свое емя и потом использовать это имя для работы с базой через DB::connection($name)->...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы