Rumah >rangka kerja php >Laravel >[Organisasi dan perkongsian] 8 petua untuk menggunakan cap masa model Laravel

[Organisasi dan perkongsian] 8 petua untuk menggunakan cap masa model Laravel

青灯夜游
青灯夜游ke hadapan
2022-09-22 20:18:591733semak imbas

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.

[Organisasi dan perkongsian] 8 petua untuk menggunakan cap masa model Laravel

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 masa

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;

    // ... 其他的属性和方法
}

2. Ubah suai senarai lalai cap waktu

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';

3 Ubah suai format tarikh/masa cap masa

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';
}

4

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();
}

5 Gunakan 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();

6 Jangan cetuskan pengubahsuaian 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();

7. Hanya kemas kini cap waktu dan Menghubungkaitkan cap waktu

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');
    }

}

8. Medan cap masa ditukar secara automatik kepada kelas 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!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam