Skip to main content

How to Selectively Disable Timestamp Columns in Laravel Models

Introduction:

In Laravel, the updated_at and created_at columns are timestamp columns that automatically update whenever a model is saved or created. However, there might be scenarios where you want to selectively disable one or both of these columns for specific models. Fortunately, Laravel provides a straightforward way to achieve this by customizing your model's const UPDATED_AT and const CREATED_AT constants. In this blog post, we will explore how to selectively disable timestamp columns in Laravel models, discuss the benefits of this approach, and guide you through the necessary steps.


Step 1: Create a Laravel Model and Migration

To demonstrate this process, let's assume we have a model called Download that represents a downloadable file in our application. If you don't have a model already, you can create one using the php artisan make:model Download command in your terminal.

To generate the migration for the downloads table, run the following command: php artisan make:migration create_downloads_table. This will create a new migration file in the database/migrations directory.


Step 2: Edit the Migration File

Open the newly created migration file (database/migrations/xxxxxxxx_create_downloads_table.php) and locate the up() method. By default, Laravel includes the timestamps() method in the create blueprint, which adds created_at and updated_at columns to the table. However, you can modify the migration file accordingly if you want to selectively disable one or both of these columns.

To disable the updated_at column, remove the ->timestamps() line from the migration file. If you also want to disable the created_at column, remove the ->timestamps() line and add a ->timestamp('created_at')->nullable() line to the migration file.

Your updated migration file should look something like this:

<?php

use Illuminate\Database\Migrations\Migration;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Support\Facades\Schema;


class CreateDownloadsTable extends Migration

{

    public function up()

    {

        Schema::create('downloads', function (Blueprint $table) {

            $table->id();

            $table->string('file_name');

            // remove this line
            // $table->timestamps();

            // Add this line if you want to keep created_at column

            // $table->timestamp('created_at')->nullable();


            // Add this line if you want to keep updated_at column

            // $table->timestamp('updated_at')->nullable();


            // Other columns if needed

        });

    }

    // Rest of the migration file

}


Step 3: Customize Timestamp Columns in the Model

Open the Download model file (app/Models/Download.php) and customize the const UPDATED_AT and const CREATED_AT constants based on your requirements.

To disable the updated_at column, add the following line within the class definition:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;


class Download extends Model

{

    const UPDATED_AT = null;

    // Other model code

}

If you also want to disable the created_at column, add the following line as well:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;


class Download extends Model

{

    const UPDATED_AT = null;

    const CREATED_AT = null;

    // Other model code

}

By customizing these constants, Laravel will no longer manage the values of the corresponding timestamp columns when saving or creating instances of the Download model.


Step 4: Run the Migration

To apply the changes to the database, run the migration using the php artisan migrate command. This will create the downloads table with the selectively disabled timestamp columns.


Conclusion:

Selective disabling of timestamp columns in Laravel models allows you to have fine-grained control over their behaviour. By customizing the const UPDATED_AT and const CREATED_AT constants in your model and modifying the migration file accordingly, you can disable one or both of these columns for specific models. This approach is useful in scenarios where you want to exclude certain models from automatic timestamp updates or when you have custom timestamp handling requirements. Remember to consider the specific needs of your project and apply this approach selectively to maintain the integrity of your data and optimize performance.

Comments

Popular Articles

Laragon: installing more versions of Apache/HTTPD

Most of the time, we casually install various PHP versions and server tools without checking if they were built for Win32 or Win64. A discussion for another day. I recently downgraded Laragon’s from PHP8.1-x64 to PHP7.x-x86. This had a little consequence - APACHE! Hence, I got the error below, indicating that my PHP and Apache can’t work together because they are of different architectures or builds.   The originally installed Apache was for 64-bit PHP versions, there are no Apache versions designed to run both 32-bit and 64-bit builds of PHP. In this article, I share steps and links that guide you to install multiple versions and builds of Apache on Laragon. 1. For all intent and purposes, you are advised to always download the latest version of Apache. Visit this URL https://www.apachelounge.com/download/additional/ to see the different versions available. It is easy to access the 64-bit versions from the homepage. However, to access the 32-bit versions, you need to use this URL. 2

Resolving Incompatible Builds of PHP and Apache in Laragon: Add multiple versions of Apache

 As developers, it's often the case that different versions of PHP and server tools are installed quickly without taking into account the architecture for which they were built. In this article, we will focus on solving a specific error that arises when running incompatible builds of PHP and Apache. Recently, I encountered an issue when downgrading my Laragon setup from PHP 8.1 (x64) to PHP 7.x (x86). This caused compatibility problems with Apache, and I received an error message indicating that my PHP and Apache builds were not compatible, as the Apache installed was built for x64 versions of PHP. In this article, I'll provide a step-by-step guide on how to install multiple versions of Apache on Laragon. By following these steps, you can resolve any similar issues that you may encounter. Step 1: Download the Latest Version of Apache Visit https://www.apachelounge.com/download/additional/ to download the latest version of Apache. The homepage provides quick access to 64-bit ve

Linux - Configure DNS server IP to resolve errors with apt-get update

Perhaps you have a new install of Ubuntu, and you are about to install docker or any other Linux packages. The first step is to update the application repositories using the sudo apt update command. There is a very small possibility that you will get the error below if you are using a fresh install of the Ubuntu 18.04 LTS (Bionic Beaver). This error simply means that Linux is unable to connect to the official repository likely due to a DNS configuration or a network issue. Here we try to help you resolve the DNS issue. To resolve this, you must specify a DNS in your network settings. Well, there is one popular DNS that works well: Google's DNS. Follow through, please. STEP 1: Go to the settings page of Linux (Ubuntu) STEP 2: This should reveal a plethora of options. On the left pane, simply scroll down and click Network as shown below. This reveals your different network connections, for me, “enp0s3” is the adapter connecter to the internet. So, I must configure DNS for “enp0s3”.