2014-02-22 4 views
1

나는 빠르고 간단한 질문을 가지고있다. 다음 쿼리 중 Laravel에서 Eloquent ORM으로 작업하는 동안 선호되는 쿼리는 무엇입니까?Eager Loading Laravel Eloquent

$post = Post::with(array('user', 'comments.from'))->find($id); 
$post = Post::with(array('user', 'comments.from'))->where('postID', $id)->get(); 

나는 열망하는로드와의 차이를 찾기 위해 고심하고 있습니다.

postID는 위 게시물 테이블의 기본 키입니다. 두 성능 모두 내 디버거를 통해 거의 동일하며 각각 8 개의 쿼리를 실행합니다.

누군가가이 문제에 대해 밝힐 수 있다면 정말 고맙겠습니다.

답변

3
  1. 이것은 사용해야합니다. 이 결과의 집합 (이 경우에도 하나의) 반환합니다

    $post = Post::with(array('user', 'comments.from'))->find($id); 
    
  2. : 그것은 하나 개의 결과 모델을 반환하는 대신 방법 2의

    $post = Post::with(array('user', 'comments.from'))->where('postID', $id)->get(); 
    
  3. 를, 무엇을 당신은 아마 할 의미 이 :

    $post = Post::with(array('user', 'comments.from'))->where('postID', $id)->first(); 
    

방법 1과 3은 기본적으로 당신에게 동일한 결과를 얻을 것이다. 방법 1은 테이블의 기본 키를 변경하면 계속 작동하기 때문에 적응력이 좋습니다. 그것은 모델 모음을 구성하지 않기 때문에 다른 두 방법보다 빠릅니다.

하지만이 기능은 모든 쿼리에서 동일하게 작동하므로 eager-loading과는 아무런 관련이 없습니다.

+0

열렬한로드로 간주됩니까? – user1011713

+0

@ user1011713 겨우 권 해드립니다. with() 및 load()는 Laravel의 eager-loading을위한 것이지만이 경우에는 모델에 추가 정보를로드하는 데 사용하는 것입니다. Post :: :: ('comments') -> get()과 같은 모델 모음을 실제로 가져 와서 모든 게시물을 의견과 함께 얻는다면, 모든 게시물을 가져 오기 때문에 eager-loading으로 간주 될 것입니다. n + 1 쿼리와 달리 2 쿼리 만있는 데이터 – TonyArra

+0

아이디어를 어떻게 열망 할 수 있었는지 생각해보십시오. – user1011713