Comment ajouter des attributs personnalisés aux modèles Laravel/Eloquent lors du chargement ?

Patricia Arquette
Libérer: 2024-11-04 05:41:29
original
505 Les gens l'ont consulté

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

Attributs personnalisés dans les modèles Laravel/Eloquent en chargement

Le défi se pose lorsque l'on tente d'ajouter des attributs personnalisés à un modèle Eloquent lorsqu'il est initialement chargé. Cela évite d’avoir à remplir manuellement les attributs à l’aide de boucles. Bien que les événements de modèle aient été explorés, ils n'ont pas donné les résultats souhaités.

Solution

Le problème sous-jacent provient de la méthode toArray() qui ignore les accesseurs ne correspondant pas directement à la base de données. colonnes du tableau. Cependant, Laravel propose une solution de contournement simple :

Laravel >= 8.0

Introduisez une classe Attribute avec une fonction getter pour calculer l'attribut personnalisé :

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

Laravel < 8.0 et >= 4.08

Ajoutez l'attribut personnalisé à la propriété $appends et définissez l'accesseur getter :

<code class="php">class EventSession extends Eloquent {
    protected $appends = ['availability'];
    public function getAvailabilityAttribute()
    {
        return $this->calculateAvailability();
    }
}</code>
Copier après la connexion

Laravel < 4.08

Remplacez la méthode toArray() pour définir explicitement l'attribut ou parcourez les attributs mutés pour récupérer leurs valeurs :

<code class="php">class EventSession extends Eloquent {
    public function toArray()
    {
        $array = parent::toArray();
        $array['availability'] = $this->availability;
        return $array;
    }
}<p>ou</p>
<pre class="brush:php;toolbar:false"><code class="php">class EventSession extends Eloquent {
    public function toArray()
    {
        $array = parent::toArray();
        foreach ($this->getMutatedAttributes() as $key) {
            $array[$key] = $this->$key;
        }
        return $array;
    }
}</code>
Copier après la connexion

En mettant en œuvre ces solutions, des attributs personnalisés peuvent être facilement ajoutés aux modèles Eloquent lors du chargement, éliminant ainsi le besoin de remplissage manuel des attributs.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!