"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment ajouter des propriétés personnalisées lorsque le modèle éloquent Laravel charge?

Comment ajouter des propriétés personnalisées lorsque le modèle éloquent Laravel charge?

Publié le 2025-04-15
Parcourir:517

How to Add Custom Attributes to Laravel Eloquent Models on Load?

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);    
    }

} 
Dernier tutoriel Plus>

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