2014-09-09 1 views
0

Laravel의 웅변 모델에 대해 알아 차 렸던 점은 관계에 대해 별도의 쿼리를 실행하는 것입니다. Department, Client, Store 및 Manager의 4 가지 관계가있는 Employee 모델이 있다고 가정 해보십시오. 이제Laravel - 데이터베이스 쿼리 컨벤션/표준 사례

, 당신은 테이블의보기에 모든 직원의 목록을 표시한다고 가정 해 보겠습니다

@foreach($employees as $employee) 
    <tr> 
     <td> {{$employee->department->name}} </td> 
     <td> {{$employee->client->name}} </td> 
     <td> {{$employee->store->name}} </td> 
     <td> {{$employee->manager->name}} </td> 
    </tr> 
@endforeach 

때마다 $ employees-> relationship->라고 무엇이든, 데이터베이스에 대한 호출을 수행 . 왜? 직원이 100 명이라면 400 개의 쿼리를 실행해야합니다.

내 질문에 :이 작업을 수행하는 좋은 방법은 무엇입니까? 쿼리 빌더를 사용하고 Eloquent를 사용하는 대신 조인을 수행 하시겠습니까? 대신 CakePHP를 사용 하시겠습니까? 하하.

+2

[열심히로드하기] (http://laravel.com/docs/eloquent#eager-loading) –

+0

당신이 열심히로드하는 경우 여기에서 잘못 계산 했으므로 관계가 4 인 직원은 상관없이 5 개의 쿼리가됩니다. 얼마나 많은 직원 기록이 반환되었는지; 그리고 반드시 합병만큼 효율적은 아니지만 코드는 훨씬 깨끗합니다. –

+0

글쎄, 그것은 예상보다 쉽습니다. 고마워 많은 친구들. – mrowland

답변

3

@watcher가 언급했듯이 eager loading을 사용하면 첫 번째 쿼리를 실행할 때로드 할 연결 테이블을 지정할 수 있습니다. 따라서 컨트롤러에 다음과 같은 내용이 포함될 것입니다 :

Employee::with('Department', 'Client', 'Store', 'Manager')->get(); 

이렇게하면 해당 속성과 함께 직원이 선택됩니다.