我想通过此网址经过时间考验的方法检索一条记录:
public/api/laptop/1
点击这条路线:
Route::get('laptop/{id}', 'LaptopController@getLaptop');
然后这个控制器方法:
$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()
不起作用?顺便说一句,标记和动作是多对一模型。
答案 0 :(得分:2)
find()
只是一个shortcut for where()->first()
,因此会返回一个对象,而Query Builder方法无法使用它:
User::find(1); // Will return User object with ID = 1.
这就是为什么你需要使用返回Query Builder对象的where()
,这样你就可以使用with()
和其他构建器方法来构建你的查询。