本日说一下,如何在框架里同时连接多个数据库?
学习韶光为什么须要连接多个数据库呢?由于,运用程序和数据库有可能不在同一台做事器。而数据库做事器,并不能包含所有的业务表。以是经由拆分的数据库须要我们建立多个连接。
一样平常我们在 .env 文件内指定本地或者线上利用的配置项。这样做比较灵巧,很随意马虎区分出不同的设置。

首先我们在 .env 文件内添加如下配置:
DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=database1DB_USERNAME=rootDB_PASSWORD=secretDB_CONNECTION_SECOND=mysqlDB_HOST_SECOND=127.0.0.1DB_PORT_SECOND=3306DB_DATABASE_SECOND=database2DB_USERNAME_SECOND=rootDB_PASSWORD_SECOND=secret
当然 DB_HOST 可以是任何远程的数据库,或者本地的数据库资源。有多少个,就须要手动定义多少个,只是把常量加以区分,以便在程序内读取。
接着在配置目录数据库配置项 config/database.php 内添加这些连接:
'mysql' => [ 'driver' => env('DB_CONNECTION'), 'host' => env('DB_HOST'), 'port' => env('DB_PORT'), 'database' => env('DB_DATABASE'), 'username' => env('DB_USERNAME'), 'password' => env('DB_PASSWORD'),],'mysql2' => [ 'driver' => env('DB_CONNECTION_SECOND'), 'host' => env('DB_HOST_SECOND'), 'port' => env('DB_PORT_SECOND'), 'database' => env('DB_DATABASE_SECOND'), 'username' => env('DB_USERNAME_SECOND'), 'password' => env('DB_PASSWORD_SECOND'),],
个中 “mysql”和“mysql2”便是数据库连接 $connection 的别名,用以区分不同的资源。如果方便影象,可以利用诸如 “mysql_server_a”"mysql_server_b" 这样的符号。
数据库操作如果你遵照框架的数据库操作办法,首先是进行表的迁移,那么创建在 migrations 内,指定给哪个数据库创建表,则须要这样写:
Schema::connection('mysql2')->create('some_table', function($table){ $table->increments('id');});
对付查询操作,利用原生的办法,须要明确指定从某个连接操作sql,须要这样写:
$users = DB::connection('mysql2')->select(...);
当然了,我们不推举在程序内进行原生sql操作,由于这样毁坏了数据库表字段的可追溯性,也损失了 Eloquent ORM 的强大功能。
以是我们利用模型操作数据库,那么指定某个 Model 利用哪个数据库的哪个表,只须要在模型文件内显式声明:
class SomeModel extends Model{ protected $connection = 'mysql2';}
这样,程序内对付 SomeModel 的所有操作就都是针对 “mysql2”这个连接所指向的数据库。
Laravel 的灵巧还不止这一点半点,如果在Model内不指定$connection,你还可以在掌握器内,在命令行程序内,在行列步队内,在中间件内,在监听器内,都可以任意指定某个Model连接:
class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('mysql2'); // 非静态方法 $something = $someModel->find(1); $something = SomeModel::on('mysql2')->find(1); // 静态方法 return $something; }}
这样优雅灵巧的用法,有没有面前一亮!
本文通过多种方法,演示了Laravel从数据库连接配置,到程序内利用的方方面面。还没有体验这个框架的同学,你真的值得一试了。
Happy coding :-)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。