2015-12-04 3 views
1

У меня есть API, написанный в lumen (laravel). Я использую Eloquent для своих моделей.
Что мне нужно сделать, так это использовать разные базы данных на основе url (конечная точка). Например, у меня есть http://apiprovider.com/api/v1/ как базовый URL-адрес API, и он подключается к базе данных api_v1, но мне нужно использовать другую базу данных, если используется v2 http://apiprovider.com/api/v2, например api_v2.
Все классы и приложения laravel должны быть одинаковыми, только разные базы данных в соответствии с версией.Использование нескольких баз данных для разных конечных точек

Настройки базы данных хранятся в файле .env.

Пожалуйста, предложите правильный способ реализовать это? Или, по крайней мере, возможные пути. Спасибо.

ответ

2

Это просто идея, я не пробовал, но простой способ заключается в переходе между двумя базами данных из промежуточного программного обеспечения.

Например, вы можете определить два соединения, доступные в database.php:

'connections' => [ 

    'mysql1' => [ 
     'driver' => 'mysql', 
     'host'  => env('DB_HOST', 'localhost'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => false, 
    ], 

    'mysql2' => [ 
     'driver' => 'mysql', 
     'host'  => env('DB_HOST_2', 'localhost'), 
     'database' => env('DB_DATABASE_2', 'forge'), 
     'username' => env('DB_USERNAME_2', 'forge'), 
     'password' => env('DB_PASSWORD_2', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => false, 
    ] 

Затем создайте промежуточное программное обеспечение и переключите DB в методе ручки

public function handle($request, Closure $next) 
{ 
    //check the request URL and decide what DB to use 

    //set the DB for this request 
    Config::set('database.default', $dbname); 
} 

Я думаю, что Config::set('database.default', $dbname); будет работать только для текущий запрос, но он сделает то, что вам нужно

+1

awesome, thx много. Работает как шарм – CROSP

Смежные вопросы