Laravel Как отобразить атрибут $hidden на модели на странице
Я использую Laravel 5.5. Я читал об этом и знаю эту функцию, и она работает makeVisible
$hidden = ['password', 'remember_token', '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
Также попробуйте этот метод из Laracasts toJson, он работает, но я не могу сделать это с помощью paginate. Можете ли вы предоставить другие методы или как решить эту проблему? Моя цель - показать email
столбец, который скрыт. Благодарю.
3 ответа
Я решаю это с помощью этого метода.
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']));
}
а на контроллере просто
return User::with('role', 'level')->paginate(10);
Я читал, откуда исходит нумерация страниц toArray
перед созданием нумерации страниц. Спасибо за вашу помощь. Также помогает
Другое возможное более простое решение в зависимости от ваших требований - позвонить makeVisible
по сбору:
// Get all users
$users = User::with('role', 'level')->paginate(10)->makeVisible(['email']);
Вы также можете использовать это с find
или get
:
$profile = auth()->user()->find($request->user()->id)->makeVisible(['email']);
Вы можете использовать это:
$paginator = User::with('role', 'level')->paginate($pageSize);
$data = $pagination->getCollection();
$data->each(function ($item) {
$item->setHidden([])->setVisible(['email']);
});
$paginator->setCollection($data);
return $paginator;
Вы можете попробовать использовать этот подход. Использование ресурсов API.
Ресурсы API позволяют форматировать данные так, как вы хотите. Вы можете создать несколько объектов Resource для разных форматов ваших коллекций.
Установите видимым ваш параметр (в этом случае email
) и когда вам нужно вернуть этот элемент, вы можете использовать другой объект Resource, который возвращает этот элемент.
Поэтому, когда нет необходимости в электронной почте:
$users = User::with('role', 'level')->paginate(10);
return UserWithoutEmail::collection($users);
когда нужна электронная почта:
$users = User::with('role', 'level')->paginate(10);
return UserWithEmail::collection($users);