질문을 삭제하지 말아주세요.!
 
1
0
-1

Model에서 hasOne이나 hasMany를 사용해서 join 테이블을 사용하는데 이게 subquery를 사용하는 것과 같나요?

    CommentAdd your comment...

    1 answer

    1.  
      2
      1
      0

      아래와 같은 경우 Subquery라 보시면 됩니다.

      $user = User::find(1);
      $posts = Post::whereUserId($user->id)->get();
      
      
      =~ 
      
      
      select * from posts where user_id = (
      	select id from users where id = 1
      );


      Join은 Subquery와 다른 겁니다. 엘로퀀트의 관계된 모델 조회는 Subquery보다는 Join이라 보시는게 맞습니다. 쿼리를 로그로 찍어 보시는게 좋겠습니다.


      --



      • 위에 예로 든 코드에서 저렇게 쓴 PHP 코드를 쿼리 빌더가 마법처럼 Subquery로 최적화해준다는 의미는 아닙니다. 쿼리는 두 번 발생하지만, 말하자면 Subquery와 같다는 논지였습니다.
      • 관계된 모델 조회는 즉시로드냐? 지연로드냐?에 따라 Join이 될 수도, 그냥 쿼리후 이미 생성된 객체에 끼워넣기가 될 수도 있겠네요.
      1. lzao

        뷰페이지의 테이블에서 해당 hasOne의 toSql()를 찍어봤을 때 테이블의 row마다 select * from table_name 이런식으로 찍혀서 혹시 subquery 형식으로 불러오는게 아닌가 했습니다.

        결국엔 subquery로 호출이 되는건 아닌거죠..?

      CommentAdd your comment...