Rumah > rangka kerja php > Laravel > teks badan

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

青灯夜游
Lepaskan: 2022-09-22 20:18:59
ke hadapan
1695 orang telah melayarinya

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;

    // ... 其他的属性和方法
}
Salin selepas log masuk

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

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

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

Kemudian apabila anda ingin menambah peranan kepada pengguna, anda boleh menggunakannya seperti ini:

$roleID = 1;
$user->roles()->attach($roleID);
Salin selepas log masuk

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();
}
Salin selepas log masuk

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

Lebih pantas untuk melakukan ini:

User::latest()->get();
Salin selepas log masuk

Secara lalai, terbaru() menggunakan created_at Isih.

Sejajar dengan itu, terdapat tertua(), yang akan diisih seperti ini dicipta_pada menaik

User::oldest()->get();
Salin selepas log masuk

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

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

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()]);
Salin selepas log masuk

Anda boleh menggunakan kaedah yang lebih pantas:

$user->touch();
Salin selepas log masuk

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

}
Salin selepas log masuk

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

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!

Label berkaitan:
sumber:learnku.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan