라라벨에서 현재 4가지의 데이터베이스를 지원하고 있다.
애플리케이션을 위한 데이터베이스 설정 파일은 config/database.php
에 있다.
이 파일에서 모든 데이터베이스 커넥션에 대한 설정을 정의하고 기본적으로 사용할 커넥션을 지정할 수 있다.
이 파일에서는 지원하는 대부분의 데이터베이스 예제가 들어 있습니다.
config/database.php
에 있는 mysql 코드는 다음과 같다.
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
다음은 어떻게 read / write 커넥션을 설정하는지에 대한 예제이다.
'mysql' => [
'read' => [
'host' => [
'192.168.1.1',
'196.168.1.2',
],
],
'write' => [
'host' => [
'196.168.1.3',
],
],
'sticky' => true,
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
기존 코드에 read
, write
그리고 sticky
세개의 키가 추가 되었다.
read
와 write
를 설정할수 있으며, 하나로 통일 하고싶은 경우는 read,write
를 사용하지않고,host => 192.168.1.2
를 이용하여 바로 연결시켜 사용하면 된다.
sticky
옵션은 현재 request-요청사이클 에서 데이터베이스에 기록된 레코드를 바로 읽을 수 있도록 하는 있어도 되고 없어도 되는 값이다.
select
기본적인 쿼리를 실행하기 위해서 DB
파사드의 select
메소드를 사용할 수 있다.
DB::select('select * from users where active = ?', [1]);
?
를 사용하는 파라미터 바인딩 대신에, 이름을 지정한 바인딩을 사용한 쿼리를 실행시킬 수 있습니다.
DB::select('select * from users where id = :id', ['id' => 1]);
insert
insert
쿼리문을 실행하기 위해서는 DB
파사드의 insert
메소드를 사용하면 됩니다.
select
메소드와 마찬가지로, 이 메소드는 첫번째 인자로 raw SQL 쿼리를, 두번째로 바인딩할 인자들을 전달 받습니다.
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
update
update
메소드는 데이터베이스에 존재하는 레코드 업데이트 하는데 사용되어집니다.
그 결과 영향을 받은 레코드들의 개수가 반환될 것입니다.
DB::update('update users set votes = 100 where name = ?', ['John']);
delete
delete
메소드는 데이터베이스에서 레코드를 삭제하는데 사용됩니다.
update
와 같이, 영향을 받은 레코드 개수가 반환됩니다.
DB::delete('delete from users');
일련의 쿼리들을 하나의 데이터베이스 트랜잭션으로 실행시키기 위해서 DB
파사드의 transaction
메소드를 사용할 수 있습니다.
트랜잭션 메소드에 전달된 Closure
안에서 예외(exception)이 발생하게 되면 트랜잭션은 자동으로 롤백됩니다. Closure
가 성공적으로 실행되면 트랜잭션은 자동으로 커밋됩니다. transaction
메소드를 사용하게 되면 일일이 롤백과 커밋에 대해서 걱정할 필요가 없습니다.