[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개의 댓글

관련 채용 정보