Heim > Artikel > Backend-Entwicklung > Wie füge ich beim Laden ein benutzerdefiniertes Attribut zu einem Laravel/Eloquent-Modell hinzu?
In Laravel/Eloquent beziehen sich benutzerdefinierte Attribute nicht direkt auf a Spalte in der zugrunde liegenden Tabelle werden beim Konvertieren von Modellen in das toArray()- oder JSON-Format ausgeschlossen.
Laravel 8 und höher:
Verwenden Sie die Attributklasse zum Erstellen eines benutzerdefinierten Accessors, der das Attribut automatisch berechnet und zuweist, wenn das Objekt geladen wird.
<code class="php">class EventSession extends Eloquent { public function availability() { return new Attribute( get: fn () => $this->calculateAvailability() ); } }</code>
Laravel 7 und niedriger:
Option 1 : Attribut an die Eigenschaft „$appends“ anhängen
Fügen Sie das benutzerdefinierte Attribut zum Array „$appends“ hinzu und definieren Sie einen geeigneten Accessor.
<code class="php">class EventSession extends Eloquent { protected $appends = ['availability']; public function getAvailabilityAttribute() { return $this->calculateAvailability(); } }</code>
Option 2: Überschreiben Sie toArray() Methode
Überschreiben Sie die toArray()-Methode und legen Sie die benutzerdefinierten Attribute explizit fest oder iterieren Sie darüber.
<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>
Option 3: Schleife durch mutierte Attribute
Durchlaufen Sie die mutierten Attribute des Modells und wenden Sie sie auf das toArray()-Array an.
<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 füge ich beim Laden ein benutzerdefiniertes Attribut zu einem Laravel/Eloquent-Modell hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!