首页 » 网站建设 » php衔接多个数据库技巧_3分钟短文 Laravel同时连接多个数据库你用啥办法

php衔接多个数据库技巧_3分钟短文 Laravel同时连接多个数据库你用啥办法

访客 2024-11-10 0

扫一扫用手机浏览

文章目录 [+]

本日说一下,如何在框架里同时连接多个数据库?

学习韶光

为什么须要连接多个数据库呢?由于,运用程序和数据库有可能不在同一台做事器。
而数据库做事器,并不能包含所有的业务表。
以是经由拆分的数据库须要我们建立多个连接。

php衔接多个数据库技巧_3分钟短文  Laravel同时连接多个数据库你用啥办法

一样平常我们在 .env 文件内指定本地或者线上利用的配置项。
这样做比较灵巧,很随意马虎区分出不同的设置。

php衔接多个数据库技巧_3分钟短文  Laravel同时连接多个数据库你用啥办法
(图片来自网络侵删)

首先我们在 .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 :-)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

标签:

相关文章