>백엔드 개발 >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은 데이터베이스 파사드를 통해 다양한 솔루션을 제공합니다.

데이터베이스 사용 연결

여러 데이터베이스 연결을 활용하는 경우 DB 파사드의 연결 방법을 사용하여 각 연결에 액세스할 수 있습니다. 연결 방법에 제공된 이름은 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'),
],

스키마 및 마이그레이션

스키마 및 마이그레이션에 사용할 연결을 지정하려면 다음과 같이 연결() 메서드를 사용하세요.

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

또는 클래스 상단에서 연결을 정의할 수도 있습니다. :

protected $connection = 'pgsql';

문의 Builder

특정 연결에 쿼리 빌더를 활용하려면:

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

Model

Laravel 5.0 이상에서는 다음을 수행할 수 있습니다. $connection 변수를 설정하십시오. 모델:

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

Eloquent

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 메소드를 사용하여 런타임에 연결을 설정할 수도 있습니다. 정적에 방법:

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으로 문의하세요.