Ich verwende Laravel 5.5 ..__ Ich habe darüber gelesen und kenne diese Funktion, und es funktioniert makeVisible
$hidden = ['password', 'remember_token', 'email'];
Ich kann E-Mail mit anzeigen
$profile = auth()->user()->find($request->user()->id);
$profile->makeVisible(['email']);
Im Frontend wird eine E-Mail angezeigt. Aber es funktioniert nicht bei vielen Ergebnissen
// Get all users
$users = User::with('role', 'level')->makeVisible(['email'])->paginate(10); // Doesn't work
Versuchen Sie auch diese Methode von Laracasts bis Json es funktioniert, aber ich kann es nicht mit paginate machen. Können Sie andere Methoden angeben oder wie Sie diese lösen können? Mein Ziel ist es, eine email
-Spalte anzuzeigen, die verborgen ist. Vielen Dank.
Ich löse das mit dieser Methode.
Users.php
am Modell
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']));
}
und auf Controller nur eine einfache
return User::with('role', 'level')->paginate(10);
Ich habe gelesen, wo die Paginierung von toArray
stammt, bevor Sie die Paginierung erstellen. Danke für deine Hilfe. Hilft auch
Sie können dies verwenden:
$paginator = User::with('role', 'level')->paginate($pageSize);
$data = $pagination->getCollection();
$data->each(function ($item) {
$item->setHidden([])->setVisible(['email']);
});
$paginator->setCollection($data);
return $paginator;
Sie können versuchen, diesen Ansatz zu verwenden. Verwenden von API-Ressourcen .
Mit API-Ressourcen können Sie die Daten nach Ihren Wünschen formatieren. Sie können mehrere Ressourcenobjekte erstellen, um Ihre Sammlungen auf unterschiedliche Weise zu formatieren.
Setzen Sie sichtbar Ihren Parameter (in diesem Fall email
) und wenn Sie dieses Element zurückgeben müssen, können Sie ein anderes Ressourcenobjekt verwenden, das dieses Element zurückgibt.
Wenn also keine E-Mail benötigt wird:
$users = User::with('role', 'level')->paginate(10);
return UserWithoutEmail::collection($users);
wenn E-Mail benötigt wird:
$users = User::with('role', 'level')->paginate(10);
return UserWithEmail::collection($users);