2017-01-03 1 views
1

컨트롤러에서 모델 관계 대신 ORM을 사용하여 데이터를 얻는 프로젝트에서 작업하고 있습니다 (예 : hasMany 등을 사용하여 적절한 모델 관계를 설정하는 대신 leftJoins 사용). 그 통해)Laravel : 모델 관계 대 ORM

내 질문은 실제로 성능과 관련이 있습니다. 모델 관계를 사용하여 leftJoins를 사용하는 것보다 빠르게 데이터에 액세스합니까? 나는 Laravel이 실제로 두건의 밑에 leftJoin를 실행하면 확실하지 않다.

나는 모델 관계를 사용하도록 코드를 리팩토링하고 실제로 성능에 도움이 될만한 가치가 있는지 결정하기를 원합니다.

미리 감사드립니다.

+0

특히 우리가 시간을 많이 쓴다면, 당신이 그런 질문에 답하는 것이 정말 어렵습니다. Laravel (적어도)은 조인을 사용하지 않습니다. 그러나 1 개의 간단한 테스트 케이스를 작성하여 설치 프로그램에서 실행하는 것이 좋습니다. –

+0

shoieb0101의 답변에 따르면 Laravel의 관계는 조인을 수행하지 않으며 관련 쿼리 (자식) 구성 요소를 가져 오기 위해 추가 쿼리를 수행합니다. 때로는 관계가 이해가되는 경우가 있습니다. 조인은 다른 테이블의 일부 데이터 만 쿼리의 결과에 추가하는 멋진 예측 가능한 배열에 연결된 데이터가 있으므로 관계가 좋습니다. – devk

답변

0

Eraquent는 조인과 달리 관계를 사용하여 쿼리를 다르게 실행할 수 있습니다. barryvdh/laravel-debugbar를 사용하여 쿼리 실행을 볼 수 있습니다.

내 관찰에 가능한 경우 Laravel은 조인 대신 두 개의 쿼리를 사용하는 경향이 있습니다. 첫 번째 쿼리를 실행 한 다음 해당 쿼리에서 반환 된 ID를 사용하여 "joined"테이블의 두 번째 쿼리를 "myID in (1,2,3,4,5 ..)"위치로 실행 한 다음 결과를 스티치합니다 함께.

다른 사람들이 제안한 것처럼 빠른 테스트를 작성하고 사용자 환경에서 가장 잘 작동하는 것이 최선의 방법 일 수 있는지 확인하십시오. 나는 당신이 당신의 코드가하는 것을 쉽게 읽을 수 있기 때문에 관계를 가능한 한 많이 사용하는 것을 선호한다.

+0

멋진 인사이트를 보내 주셔서 감사합니다. 일부 모델을 관계로 변경하고이를 내 Datagrid 패키지에로드하여 내용을 표시했습니다. 내 테스트를 토대로 Laravel은 조인을 사용하지 않는 것으로 보입니다. 부모 ID를 가져온 다음 관련 모델 데이터를 검색하기 위해 IN 쿼리를 수행합니다. 성능 향상이있는 것으로 보이며 (아직 확인할 수 없음), 코드가 유지 관리 가능하다는 것을 의미합니다. –

0

조인과 관계는 서로 반대가 아닙니다. 관계는 쉽게 개발하고,보다 깔끔하고, 읽기 쉬운 코드이며 유지하기 쉽습니다. 성능 차이는 당신이 어떤 종류의 데이터 마이너를 개발하지 않는다면 거의 존재하지 않는다.

편집 됨 성능에 중점을두면 효율적으로 캐싱을 구현할 수 있습니다.