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 중국어 웹사이트의 기타 관련 기사를 참조하세요!