[Laravel] 06. 데이터베이스(Database)

yunulog·2022년 10월 10일
0

Laravel

목록 보기
6/6
post-thumbnail

데이터베이스(Database)

라라벨 데이터베이스

라라벨에서 현재 4가지의 데이터베이스를 지원하고 있다.

  • MySQL
  • PostgreSQL
  • SQLite
  • SQL Server

데이터베이스 설정하기

애플리케이션을 위한 데이터베이스 설정 파일은 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'),
    ]) : [],
],

기존 코드에 readwrite 그리고 sticky 세개의 키가 추가 되었다.

readwrite를 설정할수 있으며, 하나로 통일 하고싶은 경우는 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 메소드를 사용하게 되면 일일이 롤백과 커밋에 대해서 걱정할 필요가 없습니다.

0개의 댓글