首页 >后端开发 >php教程 >如何在 Laravel 中管理多个数据库连接?

如何在 Laravel 中管理多个数据库连接?

Patricia Arquette
Patricia Arquette原创
2024-12-23 02:45:30181浏览

How Can I Manage Multiple Database Connections in Laravel?

使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn