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!