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

Другие вопросы по тегам