laravel 5.1 如何在身份验证前更改数据库名称
How to change database name before authentication in laravel 5.1
我有多个数据库。我想根据 url 动态更改数据库名称。如何在身份验证之前设置特定的数据库。
我想将数据库从身份验证更改为通过应用程序。
对于前。
如果 url 类似于 lara.local.com/comapny1
然后它将 select 数据库 company1
如果 url 类似于 lara.local。com/company2
然后它将 select 数据库 company2
将根据 selected 数据库进行身份验证,并将 selected 数据库用于该用户。
在 config/database 中为第二个数据库创建条目。php
'company1' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'database1'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'company2' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => 'database2',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
默认情况下,您的查询将使用 mysql
连接将连接更改为 'company1'
DB::connection('company1')->select($query);
此外,您还可以为模型设置数据库连接
$someModel = new MyModel;
$someModel->setConnection('company1');
您可以使用 Request::is()
从 URL
获取 URI
if(Request::is('company1')){
//change database to company1
Config::set("database.connections.company1.database", 'company1');
}
elseif(Request::is('company2'){
Config::set("database.connections.company1.database", 'company2');
}
您可以通过以下步骤实现此目的:
1 定义多个连接到database.php
例如:
'db1' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'db1_connection',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
2 根据条件语句使用连接(你应该把这段代码移到其他地方)
//Check url that contains 'MYCODE'
if ('URL Contains' == 'MYCODE') {
DB::disconnect();
Config::set('database.default','db1');
DB::reconnect();
}
else {
DB::disconnect();
Config::set('database.default','db2');
DB::reconnect();
}
它应该适合你,但我还没有测试过。引用自 Marcin Nabialek
的回答
您可以像这样在 AppServiceProvider boot() 中执行此操作
public function boot()
{
if($this->app['request']->getHost()=='test.com') {
Config::set('database.default','mysql');
}
else{
Config::set('database.default','mysql1');
}
}
我有多个数据库。我想根据 url 动态更改数据库名称。如何在身份验证之前设置特定的数据库。
我想将数据库从身份验证更改为通过应用程序。 对于前。 如果 url 类似于 lara.local.com/comapny1 然后它将 select 数据库 company1
如果 url 类似于 lara.local。com/company2 然后它将 select 数据库 company2
将根据 selected 数据库进行身份验证,并将 selected 数据库用于该用户。
在 config/database 中为第二个数据库创建条目。php
'company1' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'database1'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'company2' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => 'database2',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
默认情况下,您的查询将使用 mysql
连接将连接更改为 'company1'
DB::connection('company1')->select($query);
此外,您还可以为模型设置数据库连接
$someModel = new MyModel;
$someModel->setConnection('company1');
您可以使用 Request::is()
从 URL
if(Request::is('company1')){
//change database to company1
Config::set("database.connections.company1.database", 'company1');
}
elseif(Request::is('company2'){
Config::set("database.connections.company1.database", 'company2');
}
您可以通过以下步骤实现此目的:
1 定义多个连接到database.php
例如:
'db1' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'db1_connection',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
2 根据条件语句使用连接(你应该把这段代码移到其他地方)
//Check url that contains 'MYCODE'
if ('URL Contains' == 'MYCODE') {
DB::disconnect();
Config::set('database.default','db1');
DB::reconnect();
}
else {
DB::disconnect();
Config::set('database.default','db2');
DB::reconnect();
}
它应该适合你,但我还没有测试过。引用自 Marcin Nabialek
的回答您可以像这样在 AppServiceProvider boot() 中执行此操作
public function boot()
{
if($this->app['request']->getHost()=='test.com') {
Config::set('database.default','mysql');
}
else{
Config::set('database.default','mysql1');
}
}