私は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
また、この方法を試してください from Laracasts toJson 機能しますが、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);