Home  >  Article  >  PHP Framework  >  [Organization and sharing] 8 tips for using Laravel model timestamps

[Organization and sharing] 8 tips for using Laravel model timestamps

青灯夜游
青灯夜游forward
2022-09-22 20:18:591579browse

Below, the Laravel Tutorial column will share with you 8 tips on how to use Laravel model timestamps. See if you have never used them. If not, come and collect them. I hope it will be helpful to everyone!

[Organization and sharing] 8 tips for using Laravel model timestamps

By default, the Laravel Eloquent model default data tables include created_at and updated_at Two fields. Of course, we can make a lot of custom configurations and implement many interesting functions. Here are some examples.


1. Disable timestamp

If the data table does not have these two fields, when saving the data Model::create($arrayOfValues); ——You will see SQL error. Laravel When automatically filling created_at / updated_at, these two fields cannot be found.

Disable automatic filling of timestamps, just add the previous attribute in Eloquent Model:

class Role extends Model
{
    public $timestamps = FALSE;

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

2. Modify the default list of timestamps

What if you are currently using a non-Laravel type of database, that is, your timestamp column is named differently? Perhaps, they are called create_time and update_time respectively. Congratulations, you can also define it like this in the model:

class Role extends Model
{
    const CREATED_AT = 'create_time';
    const UPDATED_AT = 'update_time';

3. Modify the timestamp date/time format

The following content refers to the official Laravel documentation :

By default, the timestamp is automatically formatted as 'Y-m-d H:i:s'. If you need to customize the timestamp format, you can set the $dateFormat property in your model. This property determines the format in which the date is stored in the database and when serialized into an array or JSON:

class Flight extends Model
{
    /**
     * 日期时间的存储格式
     *
     * @var string
     */
    protected $dateFormat = 'U';
}

4. Many-to-many: Intermediate table with timestamp

When in a many-to-many association, the timestamp will not be automatically filled in, such as the intermediate table role_user# of the user table users and the role table roles ##.

In this model you can define the relationship like this:

class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}
Then when you want to add a role to the user, you can use it like this:

$roleID = 1;
$user->roles()->attach($roleID);
By default, this middle Table

does not contain timestamp . And Laravel will not try to automatically populate created_at/updated_at

but if you want to automatically save the timestamp, you need to add

created_at/updated_at in the migration file , and then add ->withTimestamps();

public function roles()
{
    return $this->belongsToMany(Role::class)->withTimestamps();
}

5. Use latest() Andoldest()Perform timestamp sorting

There are two "shortcut methods" for using timestamp sorting.

Instead:

User::orderBy('created_at', 'desc')->get();
This is faster:

User::latest()->get();
By default,

latest() uses created_at sorting.

Correspondingly, there is an

oldest(), which will be sorted like this created_at ascending

User::oldest()->get();
Of course, you can also use other specified fields Sort. For example, if you want to use

updated_at, you can do this:

$lastUpdatedUser = User::latest('updated_at')->first();

6. Do not trigger the modification of updated_at

Whenever an

Eloquent record is modified, the current timestamp will be automatically used to maintain the updated_at field, which is a great feature.

But sometimes you don’t want to do this. For example: when adding a certain value, you think this is not a “whole row update”.

Then you can do the same as above - just disable

timestamps and remember this is temporary:

$user = User::find(1);
$user->profile_views_count = 123;
$user->timestamps = false;
$user->save();

7. Update times only Stamps and associated timestamps

Just the opposite of the previous example, maybe you need to update only the

updated_at field without changing the other columns.

So, the following writing method is not recommended:

$user->update(['updated_at' => now()]);
You can use a faster method:

$user->touch();
Another situation, sometimes you not only want to update the current model The

updated_at also hopes to update the record of the superior relationship.

For example, if a

comment is updated, then you want to update the updated_at of the post table.

Then, you need to define the

$touches attribute in the model:

class Comment extends Model {

    protected $touches = ['post'];

    public function post()
    {
        return $this->belongsTo('Post');
    }

}

8. Timestamp field automatic conversionCarbonClass

One last tip, but more like a reminder since you should already know it.

By default, the

created_at and updated_at fields are automatically converted to $dates, so you don’t need to convert them to
Carbon instance, that is, the method of Carbon can be used.

For example:

$user->created_at->addDays(3);
now()->diffInDays($user->updated_at);

That’s it, a quick but hopefully helpful tip!

English original address: https://laraveldaily.com/8-tricks-with-laravel-timestamps/

Translation address: https://learnku.com/laravel/ t/39353

The above is the detailed content of [Organization and sharing] 8 tips for using Laravel model timestamps. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete