Laravel 5.2 同时使用两个不同的数据库连接 (sqlsrv + mysql)
Laravel 5.2 use two different database connections simultaneously (sqlsrv + mysql)
我想在使用模型时做这样的事情
class DB extends Model {
Protected $table = "mssql_table";
}
DB::useConnection("mssql")->All();
就配置而言,我发现我可以自己将其添加到 app/config/database。php
我也这样做了。
所以现在我已经知道了:
'mssql' => [
'driver' => 'sqlsrv',
'host' => env('DB_MSSQL_HOST', 'localhost'),
'port' => env('DB_MSSQL_PORT', '3306'),
'database' => env('DB_MSSQL_DATABASE', 'forge'),
'username' => env('DB_MSSQL_USERNAME', 'forge'),
'password' => env('DB_MSSQL_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
并将此添加到我的 .env 文件
DB_MSSQL_HOST=
DB_MSSQL_PORT=
DB_MSSQL_DATABASE=
DB_MSSQL_USERNAME=
DB_MSSQL_PASSWORD=
但下一步是什么? google 对我帮助不大,在 laravel 4.* 你可以使用 db::connection();但它似乎不再起作用了
有什么想法吗?
首先,您需要在配置中设置一个或多个数据库(一定要更改值,我几乎只是复制粘贴):
'db1' => [
'driver' => 'sqlsrv',
'host' => env('DB_MSSQL_HOST', 'localhost'),
'port' => env('DB_MSSQL_PORT', '3306'),
'database' => env('DB_MSSQL_DATABASE', 'forge'),
'username' => env('DB_MSSQL_USERNAME', 'forge'),
'password' => env('DB_MSSQL_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
'db2' => [
'driver' => 'sqlsrv',
'host' => env('DB_MSSQL_HOST', 'localhost'),
'port' => env('DB_MSSQL_PORT', '3306'),
'database' => env('DB_MSSQL_DATABASE', 'forge'),
'username' => env('DB_MSSQL_USERNAME', 'forge'),
'password' => env('DB_MSSQL_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
当然,您需要为新添加的数据库创建一些迁移模式(您需要表等):
Schema::connection('db2')->create('table_name', function($table)
{
$table->increments('id');
...
});
现在在您的 Eloquent 模型中,您可以像这样定义要使用的数据库:
class ModelName extends Eloquent {
protected $connection = 'db2';
}
谢谢@Mike Barwick,我唯一想要的是 protected $connection = ""
现在我可以一次查询2个数据库
我想在使用模型时做这样的事情
class DB extends Model {
Protected $table = "mssql_table";
}
DB::useConnection("mssql")->All();
就配置而言,我发现我可以自己将其添加到 app/config/database。php
我也这样做了。
所以现在我已经知道了:
'mssql' => [
'driver' => 'sqlsrv',
'host' => env('DB_MSSQL_HOST', 'localhost'),
'port' => env('DB_MSSQL_PORT', '3306'),
'database' => env('DB_MSSQL_DATABASE', 'forge'),
'username' => env('DB_MSSQL_USERNAME', 'forge'),
'password' => env('DB_MSSQL_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
并将此添加到我的 .env 文件
DB_MSSQL_HOST=
DB_MSSQL_PORT=
DB_MSSQL_DATABASE=
DB_MSSQL_USERNAME=
DB_MSSQL_PASSWORD=
但下一步是什么? google 对我帮助不大,在 laravel 4.* 你可以使用 db::connection();但它似乎不再起作用了
有什么想法吗?
首先,您需要在配置中设置一个或多个数据库(一定要更改值,我几乎只是复制粘贴):
'db1' => [
'driver' => 'sqlsrv',
'host' => env('DB_MSSQL_HOST', 'localhost'),
'port' => env('DB_MSSQL_PORT', '3306'),
'database' => env('DB_MSSQL_DATABASE', 'forge'),
'username' => env('DB_MSSQL_USERNAME', 'forge'),
'password' => env('DB_MSSQL_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
'db2' => [
'driver' => 'sqlsrv',
'host' => env('DB_MSSQL_HOST', 'localhost'),
'port' => env('DB_MSSQL_PORT', '3306'),
'database' => env('DB_MSSQL_DATABASE', 'forge'),
'username' => env('DB_MSSQL_USERNAME', 'forge'),
'password' => env('DB_MSSQL_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
当然,您需要为新添加的数据库创建一些迁移模式(您需要表等):
Schema::connection('db2')->create('table_name', function($table)
{
$table->increments('id');
...
});
现在在您的 Eloquent 模型中,您可以像这样定义要使用的数据库:
class ModelName extends Eloquent {
protected $connection = 'db2';
}
谢谢@Mike Barwick,我唯一想要的是 protected $connection = ""
现在我可以一次查询2个数据库