기본적인 데이터베이스 사용법(Basic Database Usage)

설정하기

라라벨은 데이터베이스 연결과 쿼리 사용을 매우 쉽게 만들어줍니다. 데이터베이스 설정 파일은 config/database.php입니다. 이 파일에서 모든 데이터베이스 커넥션에 대한 설정을 정의하고 기본적으로 사용할 커넥션을 지정할 수 있습니다. 이 파일에서는 모든 지원하는 데이터베이스 예제가 들어 있습니다.

현재 라라벨이 지원하는 데이터베이스 시스템은 : MySQL, Postgres, SQLite 그리고 SQL Server입니다.

읽기용 / 쓰기용 커넥션

SELECT문에서 사용하는 데이터베이스와 INSERT, UPDATE 그리고 DELETE문을 사용하는 데이터베이스에 다른 연결을 사용할고 싶은 경우도 있습니다. Raw 쿼리를 사용하든, 쿼리 빌더 또는 Eloquent ORM을 사용하든 적절한 연결들을 사용할 수 있습니다.

다음은 어떻게 read / write 커넥션을 설정하는지에 대한 예제입니다:

'mysql' => [
    'read' => [
        'host' => '192.168.1.1',
    ],
    'write' => [
        'host' => '196.168.1.2'
    ],
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
],

설정 배열에 readwrite 두 개의 키가 추가 된것을 참고하십시오. 이 키들은 host라는 싱글 키를 포함하는 배열 값을 갖는다: readwrite 연결에대한 나머지 데이터베이스 옵션들은 기본 mysql 배열에서 합쳐(merge)집니다. 따라서 메인 배열값들 중에서 재정의하고자하는 것들만 readwrite 배열에서 입력하면 됩니다. 위의 경우에서는 192.168.1.1 호스트는 “read” 커넥션에서 사용되고, 192.168.1.2 호스트는 “write” 커넥션에서 사용되어 집니다. 메인 mysql설정 배열에 포함된 데이터베이스 연결정보, 프리픽스, 캐릭터 셋 등 다른 모든 옵션들은 양쪽연결에서 모두 공유합니다 .

쿼리 실행

일단 데이터베이스 연결을 설정하면 DB 파사드를 사용해서 쿼리를 실행 할 수 있습니다.

Select 쿼리 실행하기

$results = DB::select('select * from users where id = ?', [1]);

select 메소드는 항상 결과를 배열로 반환합니다.

또한, named 바인딩을 사용한 쿼리를 실행할 수도 있습니다:

$results = DB::select('select * from users where id = :id', ['id' => 1]);

Insert문 실행

DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);

Update문 실행

DB::update('update users set votes = 100 where name = ?', ['John']);

Delete문 실행

DB::delete('delete from users');

참고: updatedelete문은 해당 작업이 영향을 끼친 행(row)의 수를 반환합니다.

일반적인 SQL문 실행

DB::statement('drop table users');

쿼리 이벤트 받기

DB::listen 메소드를 사용하여 쿼리 이벤트를 받을 수 있습니다:

DB::listen(function($sql, $bindings, $time)
{
    //
});

데이터베이스 트랜잭션

일련의 작업들을 하나의 데이터베이스 트랜잭션으로 실행할때 transaction메소드를 사용하면 됩니다:

DB::transaction(function()
{
    DB::table('users')->update(['votes' => 1]);

    DB::table('posts')->delete();
});

참고: transaction 메소드에 넘겨진 클로저에 어떤 예외가 발생한 경우 자동으로 트랜잭션을 롤백시킵니다.

때로는 트랜잭션을 직접 시작해야하는 경우도 있습니다:

DB::beginTransaction();

rollback메소드로 트랜잭션을 롤백 할 수 있습니다:

DB::rollback();

마찬가지로, commit메소드로 트랜잭션을 commit할 수 있습니다.

DB::commit();

커넥션 엑세스

여러 연결들을 사용할때 DB::connection메소드를 통해 특정 커넥션에 액세스 할 수 있습니다:

$users = DB::connection('foo')->select(...);

또한, PDO 인스턴스로 액세스 할 수 있습니다:

$pdo = DB::connection()->getPdo();

때로는 주어진 데이터데이스에 다시 연결해야 할 수도 있습니다:

DB::reconnect('foo');

PDO인스턴스의 max_connections한계를 넘어서서 데이터베이스 연결을 끊어야하는경우 disconnect메소드를 사용하면 됩니다:

DB::disconnect('foo');

쿼리 로깅

라라벨은 선택적으로 현재 요청에 대해서 실행되는 모든 쿼리를 메모리에 로깅할 수 있습니다. 다수의 행을 삽입 하는 경우와 애플리케이션이 그 과도한 메모리를 사용할 수 있다는 점을 유의해야 합니다. 로깅을 활성화 하기 위해서는 enableQueryLog 메소드를 사용하면 됩니다:

DB::connection()->enableQueryLog();

실행된 쿼리들의 배열을 얻으려면 getQueryLog메소드를 사용하면 됩니다:

$queries = DB::getQueryLog();