何时没有或应该在Laravel 5中使用get()

Syl*_*lar 2 php laravel laravel-5

我需要了解get();在Laravel 5中何时/不使用.

PHP警告:缺少Illuminate\Support\Collection :: get()的参数1

谷歌向我展示了他们的问题的答案,但没有人真正解释你何时应该/不使用它.

例:

App\User::first()->timesheets->where('is_completed', true)->get(); // error
App\Timesheet::where('is_completed', true)->get(); // no error
Run Code Online (Sandbox Code Playgroud)

固定:

App\User::first()->timesheets()->where('is_completed', true)->get(); // no error
Run Code Online (Sandbox Code Playgroud)

注意到时间表()而不是时间表?我可以详细解释发生了什么吗?

我来自Ruby背景,我的代码失败,因为我不知道何时使用()或不使用.

Oma*_*rek 5

我会尝试尽可能地描述这个,()在一个属性返回一个构建器的实例之后的这个符号,让我们以关系为例,

假设你有一个User与一对多关系的模型Posts,

如果你这样做:

$user = App\User::first();

$user->posts();
Run Code Online (Sandbox Code Playgroud)

这里将返回一个关系实例,因为你附加了(),现在应该何时追加()?每当你想在其上链接其他方法时,你应该这样做,例如:

$user->posts()->where('some query here')->first();
Run Code Online (Sandbox Code Playgroud)

现在我将有一个我想要的项目.

如果我需要说所有帖子我可以这样做:

$user->posts;
Run Code Online (Sandbox Code Playgroud)

或这个

$user->posts()->latest()->get();
$user->posts()->all()->get();
Run Code Online (Sandbox Code Playgroud)

所以关键在于,每当你想将方法链接到一个雄辩的查询时,使用(),如果你只想直接检索记录或访问这些记录的属性,那么就这样做:

$user->posts->title;
Run Code Online (Sandbox Code Playgroud)