在开发过程中,有时候会碰到一个项目需要连接多个数据库的情况,这种情况在laravel中很好解决。
首先我们需要在数据库配置文件中增加数据库。
在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,
],
//下面这个就是 我添加的数据库配置项。
//例如我的领个数据库在同一台服务器上。 host、port 、username、password等 我就可以不用修改。 database、prefix 数据库名和表前缀从新定义就行了。
// mysql_XXXXXX 这个代表第二个库,在model中会用到
'mysql_XXXXXX' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE_XXXXXX', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => env('DB_PREFIX_XXXXXX', ''),
'strict' => false,
'engine' => null,
],
然后在 .env 文件中做配置
因为我的两个数据库在同一台服务器,地址、端口号、账号密码 都一样 所以我只需要增加一个数据库名,一个表前缀就行了
DB_CONNECTION=mysql
DB_HOST=666.666.666.666
DB_PORT=3306
DB_DATABASE=mysql1
DB_USERNAME=root
DB_PASSWORD=root
DB_PREFIX=prefix1
DB_DATABASE_XXXXXX=mysql2
DB_PREFIX_XXXXXX=prefix2
在model中调用,要用$connection声明链接的是哪一个数据库。
如本例子中,有两个一个为默认的mysql,另一个我添加的mysql_XXXXXX。
若用第一个库,如下
class IndexModel extends Model
{
// 数据库mysql1中的user表 不声明,默认链接第一个 mysql
protected $table = "user";
}
class UserModel extends Model
{
// 数据库mysql2中的user表 声明$connection,链接 mysql_XXXXXX
protected $connection = 'mysql_XXXXXX';
protected $table = "user";
}
多个数据库链接,就这样实现了。