我在User
模型中有一个posts()
方法,该方法将全部Post
返回给我。这使我能够非常轻松地获取json中的所有帖子:
return response()->json(User::find($id)->posts()->get(), 200);
该方法是这样写的:
public function posts()
{
$posts= $this->hasMany('App\Post');
return $posts;
}
问题是我想makeVisible
我所有帖子的某些属性。所以我就这样使用each()
方法:
public function posts()
{
$posts= $this->hasMany('App\Post');
$posts->each(
function ($post, $key) {
$post->makeVisible(['hiddenAttribute', ...]);
}
);
return $posts;
}
但是我的回复没有任何变化。我错过了什么吗?
posts()
模型中的User
方法仅用于定义要查询数据库的关系。
进行查询后,即在返回查询的集合上,在控制器中执行each()
。
所以您可以这样做:
$posts = User::find($id)->posts()->get()
->each(function ($post, $key) {
$post->makeVisible(['hiddenAttribute', ...]);
});
return response()->json($posts);
只是一个小费。由于您不返回User
,仅返回用户的帖子,因此可以通过以下方式在一次查询中将用户的帖子返回到DB:
$posts = Post::where('user_id', $id)->get()
->each(//...)