[Laravel] Collection vs Query Builder
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();