Vanovich
@Vanovich
Иван

Как настроить работу с двумя базами на Laravel?

Здравствуйте!

Задача состоит в том, чтобы разделить всех пользователей приложения на две группы, скажем, на "русских" и "американцев" с двумя отдельными базами данных. В зависимости от того, к какой группе пренадлежит юзер, выводить данные с соответствующей базы. Cама группа определяется в таблице users для каждого пользователя отдельно.

В файле config/database.php я добавил новое подключение для второй базы данных.
Вывод всех данных для пользователя обрабатывается через контроллеры. Я попытался использовать проверку на принадлежность к группе и возвращать данные через DB::connection, но внутри контроллера это не работает. DB:: определяется как контроллер, который не инициализирован.

Существет ли способ в момент авторизации пользователя определить его группу и в зависимости от нее сразу установить нужное подключение к нужной базе данных на постоянной основе для этого пользователя? Прочитал, что это, кажется, можно реализовать через IoC, но я не имею представления, каким образом это делается.

Спасибо заранее!
  • Вопрос задан
  • 543 просмотра
Решения вопроса 1
glaphire
@glaphire
PHP developer
...внутри контроллера это не работает. DB:: определяется как контроллер, который не инициализирован.

Класс DB нужно импортировать c правильным неймспейсом, в данном случае нужно писать \DB::connection(...).
Если разделение на две базы данных это Ваше техническое решение, то советую еще раз его обдумать, потому что сейчас это разделение звучит неоправданно с технической точки зрения (почему нельзя нормализовать/денормализовать данные и просто хранить их в отдельных таблицах в одной базе).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
VladimirAndreev
@VladimirAndreev
php web dev
0. Вынести пользователей в отдельную бд
1. Сконфигурировать 3 разных подключения - к базе юзеров, для русских, для американцев
2. В конструкторе модели (кроме юзеров) получать группу и определять свойство $connection модели.
Ответ написан
Ваш ответ на вопрос

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

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