Laravel:在 hasMany() 调用后使用 makeVisible()

Laravel: Use makeVisible() after a hasMany() call

我正在使用 lumen 开发 REST API。我用于那 2 个模型 UserPost。在我的 User 模型中,我可以使用 hasMany() 方法获取所有用户的帖子:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
  // ...
  public function posts()
  {
    return $this->hasMany('App\Post');
  }
  // ...

获取我所有的用户帖子真的很有帮助:

return response()->json(User::find($id)->posts, 200);

问题是 Post 模型有一些隐藏的属性,这些属性没有在响应中显示(这是正常行为)但是对于某些请求我需要 return 它们。为此,laravel 提供了一个名为 makeVisible() 的方法。所以我决定在我的 posts() 方法中使用它:

  public function posts()
  {
    return $this->hasMany('App\Post')->makeVisible(['hiddenAttribute', ...]);
  }

但不幸的是,事情并没有那么简单,我得到了这个错误:

Call to undefined method Illuminate\Database\Eloquent\Relations\HasMany::makeVisible()

有谁知道如何同时使用这两种方法?

选项 1:

就像评论中的 porloscerros Ψ 所说,您必须遍历所有模型集合并使其可见

$value = User::find($id)->posts->each(function ($post, $key))
  {
    $post->makeVisible(['hiddenAttribute',...]);
  }
); 

return response()->json($value, 200);

选项 2: 扩展模型 class 以满足您的需要...请参阅: