Laravel eloquent model increment with or without updating timestamps

Panjeh
Panjeh
Feb 28 · 3 min read

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:

Plan::find($planId)->increment('popularity');

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

While you don’t want it.

Solution-1:

$plan=Plan::find($planId);$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.

Solution-2:

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

timestamps (updated_at) is not touched:

DB::table(‘plans’)
->where(‘id’, $planId)
->increment(‘popularity’,1);

timestamps (updated_at) is touched:

DB::table(‘plans’)
->where(‘id’, $planId)
->increment(‘popularity’,1,[‘updated_at’ => Carbon::now()]);

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:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Plan extends Model
{
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
}

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

$plan->updated_at = Carbon::now();

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:

Panjeh

Written by

Panjeh

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

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade