在 Laravel 中使用多个数据库
在一个系统中管理多个数据库是许多应用程序中的常见需求。 Laravel 通过其数据库外观有效地处理了这种情况。
利用数据库外观
数据库外观提供了一种连接方法,允许您访问配置中定义的各种连接/database.php 配置文件。要访问特定连接,请使用以下语法:
$users = DB::connection('foo')->select(...);
定义连接
在 Laravel 版本 5.0 及更高版本中,连接在 .env 文件中定义或config/database.php.
.env(Laravel 5.0 和稍后)
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=mysql_database DB_USERNAME=root DB_PASSWORD=secret DB_CONNECTION_PGSQL=pgsql DB_HOST_PGSQL=127.0.0.1 DB_PORT_PGSQL=5432 DB_DATABASE_PGSQL=pgsql_database DB_USERNAME_PGSQL=root DB_PASSWORD_PGSQL=secret
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'), ], 'pgsql' => [ 'driver' => env('DB_CONNECTION_PGSQL'), 'host' => env('DB_HOST_PGSQL'), 'port' => env('DB_PORT_PGSQL'), 'database' => env('DB_DATABASE_PGSQL'), 'username' => env('DB_USERNAME_PGSQL'), 'password' => env('DB_PASSWORD_PGSQL'), ],
架构和迁移
调用Connection() 方法指定模式或迁移的连接操作:
Schema::connection('pgsql')->create('some_table', function($table) { $table->increments('id'); });
查询生成器
与模式操作类似,使用connection()方法进行查询:
$users = DB::connection('pgsql')->select(...);
模型
在其模型中定义模型的连接类:
Laravel 5.0 及更高版本:
class ModelName extends Model { protected $connection = 'pgsql'; }
Laravel 4.0 和早期:
class SomeModel extends Eloquent { protected $connection = 'pgsql'; }
事务
可以使用以下语法跨多个连接执行事务:
DB::transaction(function () { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); });
结论
Laravel 提供了强大的支持通过 DB 门面和其他方法处理多个数据库。这使开发人员能够满足需要跨异构数据库系统进行无缝数据管理的应用程序的需求。
以上是如何在 Laravel 中有效管理多个数据库?的详细内容。更多信息请关注PHP中文网其他相关文章!