Di bawah, lajur tutorial Laravel akan berkongsi dengan anda 8 petua tentang cara menggunakan cap masa model Laravel Lihat jika anda tidak pernah menggunakannya, datang dan kumpulkannya Saya harap Bermanfaat untuk semua orang!
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.
1. Lumpuhkan cap waktu
Jika jadual data tidak mempunyai dua medan ini, Model::create($arrayOfValues); Ralat SQL. Laravel tidak dapat mencari kedua-dua medan ini apabila mengisi create_at / updated_at secara automatik.
Untuk melumpuhkan pengisian automatik cap waktu, cuma tambahkan atribut sebelumnya pada Model Eloquent:
class Role extends Model { public $timestamps = FALSE; // ... 其他的属性和方法 }
2 Ubah suai senarai lalai cap waktu
Bagaimana jika anda menggunakan pangkalan data bukan Laravel dan lajur cap masa anda dinamakan secara berbeza? Mungkin, mereka dipanggil create_time dan update_time 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'; }
3. Ubah suai format tarikh/masa cap masa
Kandungan berikut memetik Laravel rasmi dokumentasi:
Secara lalai, cap masa diformat secara automatik sebagai 'Y-m-d H:i:s'. Jika anda memerlukan format cap masa tersuai, anda boleh menetapkan sifat $dateFormat dalam model anda. Atribut ini menentukan format storan tarikh dalam pangkalan data dan format apabila disirikan ke dalam tatasusunan atau JSON:
class Flight extends Model { /** * 日期时间的存储格式 * * @var string */ protected $dateFormat = 'U'; }
4 >
Apabila dalam perkaitan banyak-ke-banyak, cap masa tidak akan diisi secara automatik, seperti role_user jadual perantaraan antara pengguna jadual pengguna dan peranan jadual peranan. Dalam model ini anda boleh mentakrifkan perhubungan seperti ini:class User extends Model { public function roles() { return $this->belongsToMany(Role::class); } }
$roleID = 1; $user->roles()->attach($roleID);
tetapi jika anda ingin menyimpan cap masa secara automatik, anda perlu menambah created_at/updated_at dalam fail migrasi, dan kemudian menambah ->withTimestamps();<🎜 dalam perkaitan model >
public function roles() { return $this->belongsToMany(Role::class)->withTimestamps(); }
Terdapat dua "kaedah pintasan" untuk menggunakan pengisihan cap masa.
Sebaliknya:
Lebih pantas untuk melakukan ini:User::orderBy('created_at', 'desc')->get();
User::latest()->get();
Secara lalai, latest() menggunakan created_at sorting.
Sejajar dengan itu, terdapat tertua(), yang akan diisih seperti create_at ascending
User::oldest()->get();
Sudah tentu, anda juga boleh menggunakan medan lain yang ditentukan untuk mengisih. Contohnya, jika anda ingin menggunakan updated_at, anda boleh melakukan ini:
$lastUpdatedUser = User::latest('updated_at')->first();
Setiap kali rekod Eloquent dibuat. diubah suai, Medan updated_at akan dikekalkan secara automatik menggunakan cap masa semasa, 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 cap masa, ingat ini adalah sementara:
$user = User::find(1); $user->profile_views_count = 123; $user->timestamps = false; $user->save();复制代码
Bertentangan dengan contoh sebelumnya, mungkin anda perlu mengemas kini hanya medan updated_at tanpa menukar lajur lain.
Oleh itu, kaedah penulisan berikut tidak disyorkan:
$user->update(['updated_at' => now()]);
Anda boleh menggunakan kaedah yang lebih pantas:
$user->touch();
Situasi lain, kadangkala anda bukan sahaja ingin mengemas kini kemas kini_at model semasa, tetapi juga ingin mengemas kini rekod hubungan unggul.
Sebagai contoh, jika ulasan dikemas kini, maka anda ingin mengemas kini kemas kini_at jadual siaran.
Kemudian, anda perlu mentakrifkan atribut $touches dalam model:
class Comment extends Model { protected $touches = ['post']; public function post() { return $this->belongsTo('Post'); } }
Petua terakhir, tetapi lebih seperti peringatan kerana anda sepatutnya sudah mengetahuinya.
Secara lalai, medan create_at dan updated_at secara automatik ditukar kepada $dates,
jadi anda tidak perlu menukarnya kepada tika Carbon untuk menggunakan kaedah Carbon.
Contohnya:
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati:$user->created_at->addDays(3); now()->diffInDays($user->updated_at);
Atas ialah kandungan terperinci 8 petua penggunaan cap masa model Laravel yang patut anda ketahui (Koleksi). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!