Di bawah, lajur Tutorial Laravel akan berkongsi dengan anda 8 petua tentang cara menggunakan cap masa model Laravel. Jika tidak, tambahkan sahaja pada koleksi anda.
Secara lalai, jadual data lalai model Laravel Eloquent
mempunyai dua medan: created_at
dan updated_at
. Sudah tentu, kita boleh membuat banyak konfigurasi tersuai dan melaksanakan banyak fungsi yang menarik. Di bawah adalah contoh.
Jika jadual data tidak mempunyai dua medan ini, semasa menyimpan data Model::create($arrayOfValues ); - Anda akan melihat SQL error
. Laravel
Semasa mengisi automatik created_at / updated_at
, kedua-dua medan ini tidak boleh ditemui.
Lumpuhkan pengisian automatik cap waktu, cuma tambah atribut sebelumnya dalam Eloquent Model
:
class Role extends Model { public $timestamps = FALSE; // ... 其他的属性和方法 }
Bagaimana jika anda sedang menggunakan jenis pangkalan data bukanLaravel
, iaitu, lajur cap masa anda dinamakan berbeza? Mungkin, mereka dipanggil masa_buat dan masa_kemas kini masing-masing. Tahniah, anda juga boleh mentakrifkannya seperti ini dalam model:
class Role extends Model { const CREATED_AT = 'create_time'; const UPDATED_AT = 'update_time';
Petikan kandungan berikut. dokumen tapak web rasmi dokumentasi Laravel rasmi:
Secara lalai, cap masa diformat secara automatik sebagai 'Y-m-d H:i:s'
. Jika anda perlu menyesuaikan format cap masa, anda boleh menetapkan atribut $dateFormat
dalam model anda. Atribut ini menentukan format tarikh disimpan dalam pangkalan data dan apabila disiri ke dalam tatasusunan atau JSON:
class Flight extends Model { /** * 日期时间的存储格式 * * @var string */ protected $dateFormat = 'U'; }
Apabila dalam perkaitan banyak-ke-banyak, cap masa tidak akan diisi secara automatik, seperti jadual perantaraan jadual pengguna pengguna dan jadual peranan peranan pengguna_peranan.
Dalam model ini anda boleh mentakrifkan perhubungan seperti ini:
class User extends Model { public function roles() { return $this->belongsToMany(Role::class); } }
Kemudian apabila anda ingin menambah peranan kepada pengguna, anda boleh menggunakannya seperti ini:
$roleID = 1; $user->roles()->attach($roleID);
Secara lalai Di bawah, jadual perantaraan ini tidak mengandungi cap masa . Dan Laravel
tidak akan cuba autopopulate created_at/updated_at
tetapi jika anda ingin menyimpan cap waktu secara automatik, anda perlu menambah created_at/updated_at
dalam fail migrasi dan kemudian dalam perkaitan model - >withTimestamps();
public function roles() { return $this->belongsToMany(Role::class)->withTimestamps(); }
latest()
dan oldest()
untuk pengisihan cap masa Gunakan cap masa Di sana. ialah dua "kaedah pintasan" untuk menyusun.
Sebaliknya:
User::orderBy('created_at', 'desc')->get();
Lebih pantas untuk melakukan ini:
User::latest()->get();
Secara lalai, terbaru() menggunakan created_at Isih.
Sejajar dengan itu, terdapat tertua(), yang akan diisih seperti ini dicipta_pada menaik
User::oldest()->get();
Sudah tentu, anda juga boleh gunakan Isih mengikut medan lain yang ditentukan. Contohnya, jika anda ingin menggunakan updated_at, anda boleh melakukan ini:
$lastUpdatedUser = User::latest('updated_at')->first();
updated_at
Setiap kali rekod Eloquent
diubah suai, cap masa semasa akan dikekalkan secara automatik dalam medan updated_at, yang merupakan ciri yang hebat.
Tetapi kadangkala anda tidak mahu melakukan ini, contohnya: apabila menambah nilai, anda fikir ini bukan "kemas kini keseluruhan baris".
Kemudian, anda boleh melakukan perkara yang sama seperti di atas - hanya lumpuhkan timestamps
, ingat ini adalah sementara:
$user = User::find(1); $user->profile_views_count = 123; $user->timestamps = false; $user->save();
hanyalah bertentangan dengan contoh sebelumnya, mungkin anda perlu mengemas kini hanya medan updated_at tanpa menukar lajur lain.
Jadi, kaedah penulisan berikut tidak disyorkan:
$user->update(['updated_at' => now()]);
Anda boleh menggunakan kaedah yang lebih pantas:
$user->touch();
Dalam kes lain, kadangkala anda bukan sahaja saya ingin mengemas kini updated_at model semasa, dan saya juga ingin mengemas kini rekod hubungan unggul.
Contohnya, jika ulasan dikemas kini, maka anda mahu mengemas kini jadual siaranupdated_at
juga.
Kemudian, anda perlu mentakrifkan atribut $touches
dalam model:
class Comment extends Model { protected $touches = ['post']; public function post() { return $this->belongsTo('Post'); } }
Carbon
Satu petua terakhir, tetapi lebih seperti peringatan kerana anda sepatutnya sudah mengetahuinya.
Secara lalai, medan created_at dan updated_at secara automatik ditukar kepada $dates,
jadi anda tidak perlu menukar mereka kepada Carbon
contoh, iaitu kaedah Carbon
boleh digunakan.
Contohnya:
$user->created_at->addDays(3); now()->diffInDays($user->updated_at);
Itu sahaja, petua yang pantas tetapi mudah-mudahan berguna!
Alamat asal bahasa Inggeris: https://laraveldaily.com/8-tricks-with-laravel-timestamps/
Alamat terjemahan: https://learnku.com/laravel/ t/39353
Atas ialah kandungan terperinci [Organisasi dan perkongsian] 8 petua untuk menggunakan cap masa model Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!