当一个项目需要连接多个数据库的情况,
首先在config/database.php中增加数据库:
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
//使用mysql 默认配置项
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
//这个前缀配置可以将 'prefix' => '', 更改为如下代码,方便在.env中配置
'prefix' => env('DB_PREFIX', ''),
'strict' => false,
'engine' => null,
],
//添加第二个数据库信息,mysql_### 这个代表第二个库,在model中会用到
'mysql_###' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE_###', 'forge'),
'username' => env('DB_USERNAME_###', 'forge'),
'password' => env('DB_PASSWORD_###', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => env('DB_PREFIX_###', ''),
'strict' => false,
'engine' => null,
],
然后在 .env 文件中做配置,两个数据库在同一台服务器,地址、端口号都一样,但是数据库用户名和密码不同
DB_CONNECTION=mysql
DB_HOST=666.666.666.666
DB_PORT=3306
DB_DATABASE=test1
DB_USERNAME=root
DB_PASSWORD=123456
DB_PREFIX=prefix1
DB_DATABASE_###=test2
DB_PREFIX_###=prefix2
DB_USERNAME_###=abc
DB_PASSWORD_###=abc
在model中调用,要用$connection声明链接的是哪一个数据库。
如本例子中,一个为默认的mysql,另一个mysql_###。
如下:
class IndexModel extends Model
{
// 数据库test1中的student表 不声明,默认链接第一个 mysql
protected $table = "student";
}
class UserModel extends Model
{
// 数据库test2中的student表 声明$connection,链接 mysql_###
protected $connection = 'mysql_###';
protected $table = "student";
}
多个数据库链接,就这样实现了。