Laravel:makeVisible()在each()循环中不起作用

问题描述 投票:1回答:1

我在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;
}

但是我的回复没有任何变化。我错过了什么吗?

php laravel lumen
1个回答
0
投票

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(//...)
© www.soinside.com 2019 - 2024. All rights reserved.