Laravel:在 hasMany() 调用后使用 makeVisible()
Laravel: Use makeVisible() after a hasMany() call
我正在使用 lumen 开发 REST API。我用于那 2 个模型 User
和 Post
。在我的 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 以满足您的需要...请参阅:
我正在使用 lumen 开发 REST API。我用于那 2 个模型 User
和 Post
。在我的 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 以满足您的需要...请参阅: