Maison  >  Article  >  développement back-end  >  Comment récupérer des attributs personnalisés dans les modèles Laravel lors du chargement d'objets ?

Comment récupérer des attributs personnalisés dans les modèles Laravel lors du chargement d'objets ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 12:43:29725parcourir

How to Retrieve Custom Attributes in Laravel Models on Object Load?

Récupérer les attributs personnalisés dans les modèles Laravel lors du chargement d'objets

Problème :

Vous souhaitez accédez aux attributs/propriétés personnalisés sur un modèle Laravel/Eloquent lors du chargement du modèle, sans compter sur des boucles manuelles.

Solution :

Laravel 8 :

Définissez votre attribut personnalisé en tant qu'attribut avec une fonction getter :

<code class="php">class EventSession extends Eloquent {
    public function availability() {
        return new Attribute(
            get: fn() => $this->calculateAvailability()
        );
    }
}</code>

Laravel 8- :

Méthode 1 : Ajoutez votre attribut personnalisé au tableau $appends et créez un accesseur correspondant :

<code class="php">class EventSession extends Eloquent {
    protected $appends = ['availability'];

    public function getAvailabilityAttribute() {
        return $this->calculateAvailability();
    }
}</code>

Méthode 2 : Remplacez la méthode toArray() pour inclure explicitement votre attribut :

<code class="php">class Book extends Eloquent {
    public function toArray() {
        $array = parent::toArray();
        $array['upper'] = $this->upper;
        return $array;
    }

    public function getUpperAttribute() {
        return strtoupper($this->title);
    }
}</code>

Méthode 3 : Parcourez les attributs mutés dans toArray() :

<code class="php">class Book extends Eloquent {
    public function toArray() {
        $array = parent::toArray();
        foreach ($this->getMutatedAttributes() as $key) {
            if (!array_key_exists($key, $array)) {
                $array[$key] = $this->{$key};
            }
        }
        return $array;
    }

    public function getUpperAttribute() {
        return strtoupper($this->title);
    }
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn