Benutzerdefinierte Attribute in Laravel-Modellen beim Laden von Objekten abrufen
Problem:
Sie möchten Greifen Sie beim Laden des Modells auf benutzerdefinierte Attribute/Eigenschaften eines Laravel/Eloquent-Modells zu, ohne auf manuelle Schleifen angewiesen zu sein.
Lösung:
Laravel 8:
Definieren Sie Ihr benutzerdefiniertes Attribut als Attribut mit einer Getter-Funktion:
<code class="php">class EventSession extends Eloquent { public function availability() { return new Attribute( get: fn() => $this->calculateAvailability() ); } }</code>
Laravel 8-:
Methode 1: Hängen Sie Ihr benutzerdefiniertes Attribut an das $appends-Array an und erstellen Sie einen entsprechenden Accessor:
<code class="php">class EventSession extends Eloquent { protected $appends = ['availability']; public function getAvailabilityAttribute() { return $this->calculateAvailability(); } }</code>
Methode 2: Überschreiben Sie die toArray()-Methode, um Ihr Attribut explizit einzuschließen:
<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>
Methode 3: Durch mutierte Attribute in toArray() iterieren:
<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>
Das obige ist der detaillierte Inhalt vonWie rufe ich benutzerdefinierte Attribute in Laravel-Modellen beim Laden von Objekten ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!