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

안녕하세요. 라라벨 5.2 버전을 사용하고 있습니다.

혹시 Eloquent 를 통해 SELECT 를 할 때 "use index"를 지정할 수 있는 방법이 있는지 궁금합니다.

관련해서 검색을 해보니 DB::raw("SELECT * FROM table USE INDEX (`index_name`)")  처럼 사용하더라구요.

Model::on('read')->index('')→get(); 처럼 사용할 수 있는 방법이 있을까요?

    CommentAdd your comment...

    2 answers

    1.  
      3
      2
      1

      일단 결론부터 이야기 드리자면 없습니다.

      모델 부분부분 로우 쿼리를 넣는 로직(Db::raw)으로 어떻게 할 수 있을 것 같은데 그렇게도 불가능할 것 같습니다. (smile)

       

      될지 안될지 가장 확실한 방법은 소스를 까서 보면 됩니다.  5.2 브랜치 소스를 열어보면,

      https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Query/Builder.php#L1541

      요기가 SQL 소스를 만드는 부분입니다. 쿼리빌더가 Grammar안에 있는 내용을 기반으로 대충 SQL을 쭉 만들어나가는데요,

      Select Components는

      • aggregate
      • columns
      • from
      • joins
      • wheres
      • groups
      • havings
      • orders
      • limit
      • offset
      • unions
      • lock

      순서대로 만들어갑니다. (참고 : https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Query/Grammars/Grammar.php#L22)

      만약에 위와 같은 로직을 지원한다면 이 중에 있어야 겠죠 ? 

        CommentAdd your comment...
      1.  
        4
        3
        2

        github issue 에 올라간것 같지만 계획이 없다고 답변이 달렸었습니다. 

        https://github.com/laravel/framework/issues/4625

        필요하신 경우 직접 Builder 의 macroable trait 을 사용해서 구현하셔야 할것 같습니다. 

         

          CommentAdd your comment...