Eloquent find()具有连接和急切加载

时间:2016-11-06 11:47:25

标签: laravel eloquent

我想通过此网址经过时间考验的方法检索一条记录:

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()不起作用?顺便说一句,标记和动作是多对一模型。

1 个答案:

答案 0 :(得分:2)

find()只是一个shortcut for where()->first(),因此会返回一个对象,而Query Builder方法无法使用它:

User::find(1); // Will return User object with ID = 1.

这就是为什么你需要使用返回Query Builder对象的where(),这样你就可以使用with()和其他构建器方法来构建你的查询。