Bagaimana untuk Menambah Atribut Tersuai pada Model Laravel/Eloquent pada Muatan?

Barbara Streisand
Lepaskan: 2024-11-04 13:15:29
asal
494 orang telah melayarinya

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

Tambahkan Atribut Tersuai pada Laravel/Model Fasih pada Muatan

Analisis Masalah

Dalam Laravel/Eloquent, atribut tersuai yang tidak berkaitan secara langsung dengan lajur dalam jadual asas dikecualikan apabila menukar model kepada format toArray() atau JSON.

Penyelesaian

Laravel 8 dan ke atas:

Gunakan Kelas atribut untuk mencipta aksesori tersuai yang mengira dan memberikan atribut secara automatik apabila objek dimuatkan.

<code class="php">class EventSession extends Eloquent {
  public function availability() {
    return new Attribute(
      get: fn () => $this->calculateAvailability()
    );
  }
}</code>
Salin selepas log masuk

Laravel 7 dan ke bawah:

Pilihan 1 : Tambahkan Atribut pada $appends Property

Tambahkan atribut tersuai pada tatasusunan $appends dan tentukan pengakses yang sesuai.

<code class="php">class EventSession extends Eloquent {
  protected $appends = ['availability'];
  public function getAvailabilityAttribute() {
    return $this->calculateAvailability();
  }
}</code>
Salin selepas log masuk

Pilihan 2: Override toArray() Kaedah

Timpa kaedah toArray() dan tetapkan atau ulangi secara eksplisit pada atribut tersuai.

<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>
Salin selepas log masuk

Pilihan 3: Gelung Melalui Atribut Bermutasi

Gelung melalui atribut bermutasi model dan gunakannya pada tatasusunan 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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menambah Atribut Tersuai pada Model Laravel/Eloquent pada Muatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan