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>
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>
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!