[Laravel] Collection vs Query Builder

[Laravel] Collection vs Query Builder updated_at: 2024-07-03 06:02

Collection vs Query Builder

collection 과 query builder는 개념자체가 다른 것입니다.
query builder는 database에 보내는 질의(query)를 만드는 것이고 collection은 데이타의 집합입니다.
query builder의 순서에 따라 오류가 발생할 수 있었어 몇가지 예를 보여드립니다.

query builder

$post = DB::table('posts')
->select('......')
->where('......') // 여기까지는 query builder이고
->paginate(15) // get, paginate를 사용하는 순간 $post는 collection 값이 들어 갑니다.
$post = DB::table('posts')
->where('......') // 여기까지는 query builder이고
->paginate(15) // get, paginate를 사용하는 순간 $post는 collection 값이 들어 갑니다.
->select('......') // 이럴경우 이 부분은 에러가 뜳니다. 이미 속성이  collection 으로 변경되었기때문에 이후에는 추가적인 query builder를 사용할 수 없습니다.
// Illuminate\Support\Collection::select does not exist

Eloquent

eloquent에서는 아래와 같은 실수를 범하기 쉽습니다.
아래예는 Elequent Relationships 중 하나를 예로 들었습니다.

class Blog extends Model {
..........
  public function items()
  {
    return $this->hasMany('App\Models\Items', 'item_id');
  }
}

위와 같은 경우 두가지 방식으로 모두 가져올 수 있는데 차이점은

  • $blog->items // Collection 으로 데이타를 이미 가지고 옮
  • $blog->items() // query builder 로서 이후 추가적인 builder 메소드를 사용할 수 있음
$blog->items->toJson();
$blog->items()->select('name')->get()->toJson();
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글