Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara membuat kolom virtual kompleks dalam Model Eloquent?

Solusi 1:Menggunakan cakupan global untuk menambahkan bidang ke pernyataan pilihan Anda

Satu-satunya masalah dengan kolom virtual adalah Eloquent akan mencoba memperbaruinya jika Anda tidak mencegahnya. Anda dapat mengecualikannya dari array $fillable dan menggunakan cakupan global di model Anda untuk menambahkan kolom virtual, seperti:

protected static function boot()
{
    parent::boot();

    static::addGlobalScope('next_action', function (Builder $builder) {
        $builder->addSelect(DB::raw('DATE_ADD(updated_at, INTERVAL days DAY) AS next_action'));
    });
}

Anda harus ingat bahwa ini akan memasangkan Model Anda ke MySQL karena fungsi tanggal yang Anda gunakan tidak akan berfungsi di database seperti sqlite.

Solusi 2:Menggunakan tampilan MySQL

Biasanya apa yang saya lakukan ketika saya memiliki beberapa bidang terhitung adalah membuat tampilan MySQL. Buat tampilan dengan semua bidang terhitung yang Anda inginkan, lalu Anda dapat membuat model Eloquent baru untuk tampilan tersebut tanpa harus mengkhawatirkan cakupan kueri.

Satu-satunya peringatan adalah Anda tentu saja tidak dapat menggunakan buat/perbarui/hapus pada model ini, tetapi jika Anda hanya menggunakan model untuk tujuan tampilan, itu seharusnya tidak menjadi masalah.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ini polling panjang yang sebenarnya?

  2. Jetty 7 + Konfigurasi MySQL [java.lang.ClassNotFoundException:org.mortbay.jetty.webapp.WebAppContext]

  3. Kerangka Entitas:petakan varchar ke properti DateTime

  4. bagaimana menghubungkan ke database di server lain

  5. Perhitungan ukuran database?