Я использую 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
Также попробуйте этот метод от Ларакастов до Джона это работает, но я не могу сделать это с помощью paginate. Можете ли вы предоставить другие методы или как решить эту проблему? Моя цель — показать email
столбец, который скрыт. Благодарю.
Я решаю это с помощью этого метода.
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
перед созданием нумерации страниц. Спасибо за вашу помощь. Также помогает
Вы можете использовать это:
$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);