Php Laravel如何在分页的模型上显示$hidden属性
我用的是拉威尔5.5。 我读过这篇文章,知道这个函数,它是有效的 我可以使用Php Laravel如何在分页的模型上显示$hidden属性,php,laravel,laravel-5.5,laravel-paginate,Php,Laravel,Laravel 5.5,Laravel Paginate,我用的是拉威尔5.5。 我读过这篇文章,知道这个函数,它是有效的 我可以使用 $profile = auth()->user()->find($request->user()->id); $profile->makeVisible(['email']); 在前端显示电子邮件。但它对许多结果都不起作用,比如 // Get all users $users = User::with('role', 'level')->makeVisible(['email'
$profile = auth()->user()->find($request->user()->id);
$profile->makeVisible(['email']);
在前端显示电子邮件。但它对许多结果都不起作用,比如
// Get all users
$users = User::with('role', 'level')->makeVisible(['email'])->paginate(10); // Doesn't work
也可以尝试这种方法,它可以工作,但我不能用paginate。您能否提供其他方法或如何解决此问题?我的目标是显示隐藏的
电子邮件
列。谢谢。您可以尝试使用这种方法。使用。
API资源允许您按所需的方式格式化数据。您可以创建多个资源对象,以不同的方式格式化集合
设置visible参数(在本例中为email
),当需要返回该项时,可以使用不同的资源对象返回该元素
因此,当不需要电子邮件时:
$users = User::with('role', 'level')->paginate(10);
return UserWithoutEmail::collection($users);
需要电子邮件时:
$users = User::with('role', 'level')->paginate(10);
return UserWithEmail::collection($users);
我用这个方法解决这个问题
Users.php
在模型上
public function toArray()
{
// Only hide email if `guest` or not an `admin`
if (auth()->check() && auth()->user()->isAdmin()) {
$this->setAttributeVisibility();
}
return parent::toArray();
}
public function setAttributeVisibility()
{
$this->makeVisible(array_merge($this->fillable, $this->appends, ['enter_relationship_or_other_needed_data']));
}
在控制器上只是一个简单的例子
returnuser::with('role','level')->paginate(10)代码>
在创建分页之前,我已经阅读了分页从哪里来的toArray
。谢谢你的帮助 您可以使用:
$paginator = User::with('role', 'level')->paginate($pageSize);
$data = $pagination->getCollection();
$data->each(function ($item) {
$item->setHidden([])->setVisible(['email']);
});
$paginator->setCollection($data);
return $paginator;
根据您的需求,另一个可能更简单的解决方案是在集合上调用makeVisible
:
// Get all users
$users = User::with('role', 'level')->paginate(10)->makeVisible(['email']);
您也可以将其与查找
或获取
一起使用:
$profile = auth()->user()->find($request->user()->id)->makeVisible(['email']);
试着用。是的,我试过了。仍然不起作用$users=User::with('role','level')->makeVisible(['email'])->setVisible('email')->paginate(10)
setVisible
和setHidden
仅在模型首次加载时有效。我已经尝试过这种方法了。如果在关系中使用这种方法,问题就在于它。案例用户有项目。当您返回模型项目并使用渴望加载时,json响应将隐藏电子邮件。不,如果您指定如何返回关系项(也使用API资源),则不会。无论如何,您的问题似乎已经解决,这是非常重要的一点,感谢您的解决方案!
$profile = auth()->user()->find($request->user()->id)->makeVisible(['email']);