从 laravel 模型调用方法时放置括号
Putting brackets when calling methods from laravel model
我的路线是这样的:
Route::get('/tags/post/{id}', function ($id){
$post = Post::find($id);
foreach ($post->tags as $tag) {
return $tag;
}
});
tags() 方法在 Post 模型中如下所示:
public function tags() {
return $this->morphToMany('App\Models\Tag', 'taggable');
}
在这个配置中,我的代码可以工作,但是当我在 web.php 中的标记方法后面加上括号时,我的代码 returns null:
Route::get('/tags/post/{id}', function ($id){
$post = Post::find($id);
foreach ($post->tags() as $tag) {
return $tag;
}
});
我需要知道什么时候在调用方法名称后加上括号?
$post->tags 是一个 属性,相当于方法调用 $post->tags()->get()。 $post->tags() 允许你做额外的查询,比如 $post->tags()->where(...),然后你用闭包完成它,比如 -> get() 或 ->first() –
蒂姆·刘易斯
是的,在 Laravel 中,特别是对于模型,使用或省略 () 会产生巨大的差异。 Laravel “神奇地”将 public function tags() 之类的关系方法转换为快捷方式访问的属性,具有上述等价性。如果您不确定,请使用 dd(),dd($post->tags) 应该向您展示一个 Collection,而 dd($post->tags()) 应该向您展示一个 Builder实例等。编码愉快! –
蒂姆·刘易斯
我的路线是这样的:
Route::get('/tags/post/{id}', function ($id){
$post = Post::find($id);
foreach ($post->tags as $tag) {
return $tag;
}
});
tags() 方法在 Post 模型中如下所示:
public function tags() {
return $this->morphToMany('App\Models\Tag', 'taggable');
}
在这个配置中,我的代码可以工作,但是当我在 web.php 中的标记方法后面加上括号时,我的代码 returns null:
Route::get('/tags/post/{id}', function ($id){
$post = Post::find($id);
foreach ($post->tags() as $tag) {
return $tag;
}
});
我需要知道什么时候在调用方法名称后加上括号?
$post->tags 是一个 属性,相当于方法调用 $post->tags()->get()。 $post->tags() 允许你做额外的查询,比如 $post->tags()->where(...),然后你用闭包完成它,比如 -> get() 或 ->first() – 蒂姆·刘易斯
是的,在 Laravel 中,特别是对于模型,使用或省略 () 会产生巨大的差异。 Laravel “神奇地”将 public function tags() 之类的关系方法转换为快捷方式访问的属性,具有上述等价性。如果您不确定,请使用 dd(),dd($post->tags) 应该向您展示一个 Collection,而 dd($post->tags()) 应该向您展示一个 Builder实例等。编码愉快! – 蒂姆·刘易斯