Задача состоит в том, чтобы разделить всех пользователей приложения на две группы, скажем, на "русских" и "американцев" с двумя отдельными базами данных. В зависимости от того, к какой группе пренадлежит юзер, выводить данные с соответствующей базы. Cама группа определяется в таблице users для каждого пользователя отдельно.
В файле config/database.php я добавил новое подключение для второй базы данных.
Вывод всех данных для пользователя обрабатывается через контроллеры. Я попытался использовать проверку на принадлежность к группе и возвращать данные через DB::connection, но внутри контроллера это не работает. DB:: определяется как контроллер, который не инициализирован.
Существет ли способ в момент авторизации пользователя определить его группу и в зависимости от нее сразу установить нужное подключение к нужной базе данных на постоянной основе для этого пользователя? Прочитал, что это, кажется, можно реализовать через IoC, но я не имею представления, каким образом это делается.
...внутри контроллера это не работает. DB:: определяется как контроллер, который не инициализирован.
Класс DB нужно импортировать c правильным неймспейсом, в данном случае нужно писать \DB::connection(...).
Если разделение на две базы данных это Ваше техническое решение, то советую еще раз его обдумать, потому что сейчас это разделение звучит неоправданно с технической точки зрения (почему нельзя нормализовать/денормализовать данные и просто хранить их в отдельных таблицах в одной базе).
Cпасибо за ответ.
На счет двух баз - это решение клиента, вряд ли получится его оспорить.
Что касается \DB::connection(...), то не хотелось бы использовать и этот подход, ведь по сути я заново переписываю вывод данных с базы, просто уже для другой группы пользователей. А это все уже существует, просто в единственном экземпляре.
Идеальный вариант в этом случае для меня - для каждого пользователя указать, с какой базы доставать данные для него конкретно силами уже существующих контроллеров и методов
Vanovich, Андрей правильно подсказывает, у модели есть свойство $connection, переопределите его в своей модели (в документации не нашла ссылки, вот исходник как доказательство этого подхода).
0. Вынести пользователей в отдельную бд
1. Сконфигурировать 3 разных подключения - к базе юзеров, для русских, для американцев
2. В конструкторе модели (кроме юзеров) получать группу и определять свойство $connection модели.
Спасибо за ответ.
Можно, пожалуйста, подробнее о свойстве $connection? Оно определяется в самом конструкторе или можно обратиться к нему из любого места?
Андрей, каким образом можно динамически переопределять значение свойства в данном случае?
Условие внутри класса я поставить не могу, передать через переменную, которая объявлена вне класса, тоже.
Нужна функция?