Gop*_*osa 7 php laravel laravel-paginate laravel-5.5
我正在使用Laravel 5.5.我读到了这个并知道这个功能,它的作用是makeVisible
$hidden = ['password', 'remember_token', 'email'];
Run Code Online (Sandbox Code Playgroud)
我可以使用显示电子邮件
$profile = auth()->user()->find($request->user()->id);
$profile->makeVisible(['email']);
Run Code Online (Sandbox Code Playgroud)
在前端电子邮件显示.但它不适用于许多结果
// Get all users
$users = User::with('role', 'level')->makeVisible(['email'])->paginate(10); // Doesn't work
Run Code Online (Sandbox Code Playgroud)
也尝试从Laracasts到Json这个方法它可以工作,但我不能使用paginate.你能提供其他方法或如何解决这个问题吗?我的目标是显示email隐藏的列.谢谢.
Nir*_*hah 17
根据您的要求,另一个可能更简单的解决方案是调用makeVisible集合:
// Get all users
$users = User::with('role', 'level')->paginate(10)->makeVisible(['email']);
Run Code Online (Sandbox Code Playgroud)
您还可以将其与find或 一起使用get:
$profile = auth()->user()->find($request->user()->id)->makeVisible(['email']);
Run Code Online (Sandbox Code Playgroud)
小智 8
你可以使用这个:
$paginator = User::with('role', 'level')->paginate($pageSize);
$data = $pagination->getCollection();
$data->each(function ($item) {
$item->setHidden([])->setVisible(['email']);
});
$paginator->setCollection($data);
return $paginator;
Run Code Online (Sandbox Code Playgroud)
我用这种方法解决了。
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']));
}
Run Code Online (Sandbox Code Playgroud)
而在控制器上只是一个简单的
return User::with('role', 'level')->paginate(10);
toArray在创建分页之前,我已经阅读了分页的来源。感谢你的帮助。也有帮助