Laravel Как отобразить атрибут $ hidden на модели на paginate

Я использую 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 столбец, который скрыт. Благодарю.

5

Решение

Я решаю это с помощью этого метода.

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 перед созданием нумерации страниц. Спасибо за вашу помощь. Также помогает

3

Другие решения

Вы можете использовать это:

    $paginator = User::with('role', 'level')->paginate($pageSize);
$data = $pagination->getCollection();
$data->each(function ($item) {
$item->setHidden([])->setVisible(['email']);
});
$paginator->setCollection($data);
return $paginator;
1

Вы можете попробовать использовать этот подход. С помощью Ресурсы 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);
0
По вопросам рекламы [email protected]