Laravel eloquent model increment with or without updating timestamps

Image for post
Image for post

Problem:
You may need to increment a field in a record of a table (a single attribute of a Laravel Model) and do not want update the updated_at timestamps.

Suppose the field is popularity when you do this:

Besides incrementing popularity, this will update the timestamps of that record too!

While you don’t want it.

Solution-1:

$plan->timestamps = false;
$plan->increment('popularity');
$plan->save();

As an example see how laravel does the same when update the remember_me token at each logout without touching the timestamps.

In class EloquentUserProvider in Illuminate\Auth directory (this link) in the updateRememberToken() method Laravel first assigns the value (true or false) of timestamps to a temporary variable and after saving the remember_token in the $user model retrieves its original value.

Image for post
Image for post

Solution-2:

Using a simple query builder which does not update timestamps on its own:

timestamps (updated_at) is not touched:

timestamps (updated_at) is touched:

Solution-3:

By default, Eloquent expects created_at and updated_at columns to exist on your tables. If you do not wish to have these columns automatically managed by Eloquent, set the $timestamps property on your model to false:

In this case, whenever you want the timestamps to be updated, you need to manually assign them value like

Thank you for reading! If you enjoyed this article:

Clap it ! Share it! Follow Me in Medium!

Also I’d like to hear your opinion on this article. If you have any doubt, question or suggestion please leave a comment below.

Have a very wonderful day!

Previous Stories You will Love:

Written by

Web geek, Self-taught full-stack web developer, Learning Python, Laravel, Vuejs, UX/UI design, Nuclear Physicist PhD

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store