9강 - 쿼리 빌더

SQL 문을 php 코드로 쓴 거라고 보면 된다. 지금은 그냥 SQL로 쓰면 될 것, 더 길고 복잡한 코드로 쓰지?라고 반문할 수 있지만.. 차차 그 편리성을 알게 되니 무작정 따라해 보자.

쿼리 빌더를 이용해 보자.

DB Facade와 table(), get() 메소드를 이용하여 Collection(레코드셋)을 가져 와 보자.

$ php artisan tinker
>>> DB::table('posts')->get(); # SELECT * FROM posts
=> [
     {#679
       +"id": 1,
       +"title": "My Title",
       +"body": "My Body",
     },
     {#680
       +"id": 2,
       +"title": "Modified Title",
       +"body": "Second Body",
     },
   ]

first(), find() 메소드로 Instance(레코드)를 가져오자.

>>> DB::table('posts')->find(2);
=> {#688
     +"id": 2,
     +"title": "Modified Title",
     +"body": "Second Body",
   }
>>> DB::table('posts')->first();
=> {#671
     +"id": 1,
     +"title": "My Title",
     +"body": "My Body",
   }

where() 예상대로 where 절을 사용하는 거다.

# 모두 동일한 쿼리이다. where()에서 = 연산자는 생략 가능하다.
>>> DB::table('posts')->where('id', '=', 1)->get(); 
>>> DB::table('posts')->where('id', 1)->get();
>>> DB::table('posts')->whereId(1)->get();
=> [
     {#692
       +"id": 1,
       +"title": "My Title",
       +"body": "My Body",
     },
   ]

참고 whereId()는 Dynamic Method이다. 참고 where()에 Closure를 쓸 수도 있다 where(function($query) {$query->where('field', 'operator', 'value);})

select()를 이용하여 필요한 필드만 가져오자.

>>> DB::table('posts')->select('title')->get();
=> [
     {#686
       +"title": "My Title",
     },
     {#678
       +"title": "Modified Title",
     },
   ]

자주 쓰는 메소드들이다. 공식 문서를 보면 알겠지만, count(), distinct(), select(DB::raw('count(*) as cnt')), join(), union(), whereNull(), having(), groupBy(), ... 표현하지 못하는 SQL 문장은 없다고 보면 된다.

  • insert(array $value)
  • update(array $values)
  • delete(int $id)
  • lists(string $column)
  • orWhere(string $column, string $operator, mixed $value)
  • limit(int $value) // == take(int $value)
  • orderBy(string $column, string $direction)
  • latest() // == orderBy('created_at', 'desc')



comments powered by Disqus
목록 토글
keyboard_arrow_up