Comment ajouter des attributs personnalisés aux modèles éloquents de Laravel sur la charge?
Dans Laravel Eloquent, vous pouvez rencontrer un scénario où vous souhaitez ajouter un attribution personnalisé à un modèle lorsqu'il est chargé. Par exemple, considérez un contrôleur comme celui-ci:
public function index()
{
$sessions = EventSession::all();
foreach ($sessions as $i => $session) {
$sessions[$i]->available = $session->getAvailability();
}
return $sessions;
}
Il serait pratique de sauter la boucle manuelle et de faire remplir automatiquement l'attribut 'disponible'. Ceci est une conception intentionnelle pour des raisons de performances. protégé $ table = «sessions»; Disponibilité des fonctions publiques () { return nouvel attribut ( get: fn () => $ this-> calculAvailability () )); } }
Versions Laravel
Option 1: propriété appels
pour les versions inférieures à 8, vous pouvez utiliser les propriétés $ A SPEPDS pour contrôler quels attributs sont inclus dans la forme sérialisée du modèle:
Éloquent { protégé $ table = «sessions»; protégé $ ajout = array («disponibilité»); fonction publique getAvailabilityAtTribute () { retourner $ this-> CalculateAvailability (); } }Option 2: Override toArray () Method
Alternativement, vous pouvez remplacer la méthode toArray () et définir manuellement l'attribut:
class EventSession extends Eloquent {
protected $table = 'sessions';
public function availability()
{
return new Attribute(
get: fn () => $this->calculateAvailability()
);
}
}
le livre de classe étend {éloque {
protégé $ table = 'livres';
fonction publique toArray ()
{
$ array = parent :: toArray ();
$ Array ['Upper'] = $ this-> Upper;
retourner $ array;
}
fonction publique getUpperAttribute ()
{
return strtoupper ($ this-> title);
}
} Option 3: Loop via les attributs mutés
Si vous avez de nombreux accessoires personnalisés, vous pouvez les itérer et les appliquer pendant la sérialisation:
le livre de classe éloque {
classe le livre de classe éloque { le livre de classe éloque {
protégé $ table = 'livres';
fonction publique toArray ()
{
$ array = parent :: toArray ();
foreach ($ this-> getMutatedAttributes () comme $ key)
{
if (! array_key_exists ($ key, $ array)) {
$ array [$ key] = $ this -> {$ key};
}
}
retourner $ array;
}
fonction publique getUpperAttribute ()
{
return strtoupper ($ this-> title);
}
}
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3