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背景,我的代码失败,因为我不知道何时使用()或不使用.
我会尝试尽可能地描述这个,()在一个属性返回一个构建器的实例之后的这个符号,让我们以关系为例,
假设你有一个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)