Различные базы данных, один и тот же сайт.... с Laravel
Это может быть неуместным вопросом для stackru.... поскольку он может быть слишком конкретным.
Но мне было интересно, кто-нибудь знает, как у меня будет одна установка Laravel, обслуживающая сайт. Но в зависимости от URL я могу получить доступ к различным базам данных.
То есть...
www.mainsite.com/company1/login - database1
www.mainsite.com/company1/users - database1
..
www.mainsite.com/company2/login - database2
www.mainsite.com/company2/users - база данных2
Таким образом, в приведенных выше случаях обслуживаемый сайт является точно таким же сайтом. Но, конечно, каждая часть имеет логин и доступ к другой базе данных.
Я знаю, что могу сделать это, имея несколько установок laravel, и вот как я сейчас это делаю...
Но я хочу иметь возможность просто обновить ОДНУ версию... вместо того, чтобы копировать мои изменения во все разные папки.
Затем просто предоставьте этот сайт всем различным компаниям. Имея доступ только к своей базе данных
Это возможно??
2 ответа
Вы можете определить несколько баз данных в вашей конфигурации:
'default' => 'database1',
'connections' => array(
'database1' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database1',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
),
'database2' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database2',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
),
),
Затем запрос с использованием свободно:
$user = DB::connection('database2')->table('users')->where('id', '=', 1)->first();
Может быть, вы могли бы использовать среды, что-то вроде этого:
$environments = array(
'company1' => array('http://server.com/company1*'),
'company2' => array('http://server.com/company2*'),
);
Затем создайте ваши подпапки в конфигурации и скопируйте конфигурацию базы данных для редактирования по мере необходимости.
Один из методов, который я использовал для этого, заключался в том, чтобы генерировать имена баз данных для новых клиентов, которые регистрируются и сохраняют их в моей основной базе данных. База данных будет создана и перенесена в это же время. Когда пользователь входит в систему каждый раз после этого, программное обеспечение ищет его имя базы данных и устанавливает конфигурацию для него на лету, используя:
Config::set(['database.connections.customerid'])
,
Вы все еще можете иметь все вкусности, предлагаемые Laravel и Eloquent, и не полагаться на необработанные запросы. Это также освобождает вас от управления большим файлом конфигурации. Я также создал каталоги ресурсов, соответствующие названию их схемы, чтобы у них мог быть настроенный фронтальный сайт с файлами и стилями просмотра, в то же время выполняя тот же стек, что и все остальные.