2016-11-06 2 views
1

나는이 URL의 시간 - 테스트 방법을 통해 하나 개의 레코드를 검색 할 :웅변 발견은 조인과 열망 로딩

public/api/laptop/1 

이 경로 타격 : 다음이 컨트롤러 방법을

Route::get('laptop/{id}', '[email protected]'); 

을 :

$laptop = Laptop::find($id)->addJoins()->selectListCols()->with('earmarks', 'movements')->get(); 
return $laptop; 

문제는 작동하지 않습니다 (모든 레코드를 반환).

$laptop = Laptop::where('laptops.id', $id)->addJoins()->selectListCols()->with('earmarks', 'movements')->get(); 
return $laptop; 

그러나 find()이 작동하지 않는 이유를 난 그냥 궁금 해서요 : 그것은 내가이 작업을 수행 할 필요가 작동하게하려면? earmarks와 움직임은 그런데 Many-To-One 모델입니다.

답변

2

find() 그냥 shortcut for where()->first()은 그래서 객체 반환하고 Query Builder 방법이 작동하지 않습니다이다 :

당신이 with()을 사용할 수 있도록, 쿼리 빌더 객체를 반환 where()를 사용해야하는 이유입니다
User::find(1); // Will return User object with ID = 1. 

및 기타 빌더 메소드를 사용하여 조회를 빌드하십시오.

+0

알겠습니다. 감사합니다. 위와 같이 대신'where() '를 사용하는데있어서 단점이 있습니까? – daninthemix

+0

아니요,이 쿼리에서'where()'를 사용하는 것은 절대적으로 정상입니다. –

+0

다시 한번 감사드립니다. 그래서,'find()'는 조인을 할 필요가 없거나 하나의 레코드를 검색하는 것보다 더 복잡한 것이있을 때만 유용 할 것이라고 생각하는 것이 맞습니까? – daninthemix