使用 Laravel 连接多个数据库
为了管理 Laravel 系统中的多个数据库,Laravel 通过其数据库外观提供了通用的解决方案。
使用数据库连接
当使用多个数据库连接时,您可以使用数据库外观上的连接方法访问每个连接。提供给连接方法的名称与 config/database.php 配置文件中定义的名称一致:
$users = DB::connection('foo')->select(...);
连接定义
数据库连接可以是使用 .env 文件或 config/database.php 文件进行配置:
使用.env 文件:
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'); });
或者,您可以在类的顶部定义连接:
protected $connection = 'pgsql';
查询生成器
利用查询生成器进行特定连接:
$users = DB::connection('pgsql')->select(...);
模型
在 Laravel 5.0 及更高版本中,您可以在模型中设置 $connection 变量:
class ModelName extends Model { protected $connection = 'pgsql'; }
雄辩
在 Laravel 中4.0 及以下版本,您可以在模型中定义 $connection 变量:
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']); });
或
DB::connection('mysql')->beginTransaction(); try { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->beginTransaction(); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); DB::connection('pgsql')->commit(); DB::connection('mysql')->commit(); } catch (\Exception $e) { DB::connection('mysql')->rollBack(); DB::connection('pgsql')->rollBack(); throw $e; }
运行时连接管理
也可以在运行时使用 setConnection 方法或 on static 方法建立连接:
class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('pgsql'); // non-static method $something = $someModel->find(1); $something = SomeModel::on('pgsql')->find(1); // static method return $something; } }
注意
何时与不同数据库中的表建立关系时,由于基于数据库和设置的潜在警告,因此务必谨慎行事。雇用。
以上是如何在 Laravel 中管理多个数据库连接?的详细内容。更多信息请关注PHP中文网其他相关文章!