webentwicklung-frage-antwort-db.com.de

Laravel Wie kann man ein verstecktes Attribut auf paginate anzeigen lassen?

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.

5
Goper Leo Zosa

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

4
Goper Leo Zosa

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;
1
Star lin

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);
0
HCK