ホームページ >バックエンド開発 >PHPチュートリアル >Laravelで複数のデータベース接続を管理するにはどうすればよいですか?

Laravelで複数のデータベース接続を管理するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-04 11:11:35399ブラウズ

How to Manage Multiple Database Connections in Laravel?

Laravel での複数のデータベースの管理

Laravel アプリケーションを使用する場合、複数のデータベースが必要になる状況がよく発生します。このような場合、Laravel アプリケーション内でこれらのデータベースを効果的に管理し、操作する方法を理解することが重要です。

Laravel のデータベース ファサード

Laravel は、データベースの中心点として機能する DB ファサードを提供します。さまざまなデータベース接続にアクセスします。 DB ファサードが提供する接続メソッドを利用することで、開発者は複数のデータベースへの接続を確立および取得できます。接続メソッドでは、config/database.php 構成ファイルで定義された接続名に対応するパラメーターが必要です。

$users = DB::connection('foo')->select(...);

データベース接続の構成

.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'),
],

.env なし (Laravel :

return array(
    'default' => 'mysql',
    'connections' => array(
        'mysql' => array(
            'driver' => 'mysql',
            'host' => '127.0.0.1',
            'database' => 'mysql_database',
            'username' => 'root',
            'password' => 'secret',
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
        ),

        'pgsql' => [
            'driver' => 'pgsql',
            'host' => 'localhost',
            'port' => '5432',
            'database' => 'pgsql_database',
            'username' => 'root',
            'password' => 'secret',
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
        ]
    ),
);

クエリとモデル操作

スキーマ:

接続メソッドを適用して、スキーマ操作用のデータベースを指定できます:

Schema::connection('pgsql')->create('some_table', function($table){ ... });

クエリBuilder:

$users = DB::connection('pgsql')->select(...);

Models:

接続はモデル内で明示的に定義できます。 class:

class ModelName extends Model {
    protected $connection = 'pgsql';
}

Eloquent:

class SomeModel extends Eloquent {
    protected $connection = 'pgsql';
}

トランザクション

トランザクションは複数のデータベースにわたって管理することもできます:

DB::transaction(function () {
    DB::connection('mysql')->table('users')->update(...);
    DB::connection('pgsql')->table('orders')->update(...);
});

ランタイム接続管理

接続は動的に設定できます:

$someModel = new SomeModel;
$someModel->setConnection('pgsql'); // non-static
$something = $someModel->find(1);
$something = SomeModel::on('pgsql')->find(1); // static

関係と注意事項

異なるデータベース間の関係を扱う場合は注意してください。可能ですが、データベースのセットアップと設定について慎重に検討する必要がある場合があります。

以上がLaravelで複数のデータベース接続を管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。