Heim > Backend-Entwicklung > PHP-Tutorial > Wie füge ich beim Laden ein benutzerdefiniertes Attribut zu einem Laravel/Eloquent-Modell hinzu?

Wie füge ich beim Laden ein benutzerdefiniertes Attribut zu einem Laravel/Eloquent-Modell hinzu?

Barbara Streisand
Freigeben: 2024-11-04 13:15:29
Original
534 Leute haben es durchsucht

How to Add a Custom Attribute to a Laravel/Eloquent Model on Load?

Hinzufügen eines benutzerdefinierten Attributs zu einem Laravel/Eloquent-Modell beim Laden

Problemanalyse

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.

Lösung

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage