laravel并行访问MySQL_Laravel同时连接多个数据库

本文介绍了如何在 Laravel 中配置并行访问多个 MySQL 数据库,包括在.env文件中添加配置,更新config/database.php,以及如何在数据库操作中选择特定连接。通过指定模型的连接或在运行时动态切换,可以实现不同数据库的灵活操作。
摘要由CSDN通过智能技术生成

配置

一般我们在 .env 文件内指定本地或者线上使用的配置项。这样做比较灵活,很容易区分出不同的设置。

首先我们在 .env 文件内添加如下配置:

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=database1

DB_USERNAME=root

DB_PASSWORD=secret

DB_CONNECTION_SECOND=mysql

DB_HOST_SECOND=127.0.0.1

DB_PORT_SECOND=3306

DB_DATABASE_SECOND=database2

DB_USERNAME_SECOND=root

DB_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" 这样的符号。

数据库操作

对于查询操作,使用原生的方式,需要明确指定从某个连接操作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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值