Comment puis-je ajouter des attributs personnalisés aux modèles éloquents ?

Patricia Arquette
Libérer: 2024-10-30 03:38:02
original
756 Les gens l'ont consulté

How Can I Add Custom Attributes to Eloquent Models?

Ajout d'attributs personnalisés aux modèles Eloquents

La possibilité d'augmenter les modèles Laravel/Eloquent avec des attributs personnalisés est essentielle pour améliorer la représentation du modèle. Par défaut, les modèles exposent les attributs correspondant aux colonnes de leur table. Cependant, il est souvent souhaitable d'accéder à des données ou à des calculs supplémentaires sans interroger la base de données.

L'un des défis réside dans le remplissage des attributs personnalisés lorsque les modèles sont chargés. La méthode toArray() par défaut exclut les accesseurs qui ne correspondent pas directement aux colonnes du tableau. Pour surmonter cette limitation :

Versions Laravel >= 8 :

Utilisez la classe Attribute avec une fonction getter. Cela permet de définir des attributs personnalisés sans relation directe avec les colonnes du tableau.

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

Versions Laravel < 8 :

Deux options sont disponibles :

Option 1 : Paramètre d'attribut explicite

Remplacez la méthode toArray() et attribuez manuellement le attribut personnalisé.

<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);
    }
    ...
}<p><strong>Option 2 : boucler via les accesseurs personnalisés</strong></p>
<p>Parcourir tous les attributs mutés et les appliquer à la représentation du tableau.</p>
<pre class="brush:php;toolbar:false"><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;
    }
    ...
}</code>
Copier après la connexion

En utilisant ces techniques, les développeurs peuvent augmenter les modèles Eloquent avec des attributs personnalisés, enrichissant leur représentation et améliorant les fonctionnalités de l'application.

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