일반 웹사이트는 DB서버를 한가지만 (mysql, mssql, pgsql 등 중에서 한가지) 사용한다.
하지만 mysql만 사용하는 회사에서 외부 업체의 mssql을 함께 사용해야 하는 일이 생긴다면?
아니면 개발 DB가 존재하는 회사에서 1월 DB에 있는 테스트 데이터를 2월 DB로 마이그레이션 해야 할 일이 온다면?
라라벨에서는 이를 위해서 DB 멀티 연결을 제공한다.
/config/database.php 파일에 아래와 같이 추가해준다.
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', ''),
'username' => env('DB_USERNAME', ''),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => '',
'prefix' => '',
'strict' => false,
'engine' => null,
],
'mssql' => [
'driver' => 'sqlsrv',
'host' => env('DB_MSSQL_HOST', ''),
'port' => env('DB_MSSQL_PORT', ''),
'database' => env('DB_MSSQL_DATABASE', ''),
'username' => env('DB_MSSQL_USERNAME', ''),
'password' => env('DB_MSSQL_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
],
],
이렇게 하게되면 기본 연결 DB는 mysql이지만 mssql이나 다른 엔드포인트의 DB도 연결할 수 있는 환경이 구성된다.
만일 테이블 모델에서 mssql을 사용하고자 한다면 아래와 같이 변수값 하나만 추가해주면 된다.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class YourModel extends Model
{
protected $connection = 'mssql';
protected $table ='your_table';
}
바로 $connection 변수를 사용하면 된다.
위와 같이 모델을 구성하여 기존 라라벨 모델처럼 동일하게 사용할 수 있다.