Bird
Raised Fist0
Laravelframework~10 mins

Timestamps management in Laravel - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Timestamps management
Model Created
↓
Check if timestamps enabled?
No→Skip timestamp update
Yes↓
Set created_at and updated_at to current time
↓
Save model to database
↓
On Model Update
↓
Check if timestamps enabled?
No→Skip timestamp update
Yes↓
Set updated_at to current time
↓
Save changes to database
When a Laravel model is created or updated, it checks if timestamps are enabled. If yes, it sets created_at and updated_at fields automatically before saving.
Execution Sample
Laravel
use Illuminate\Database\Eloquent\Model;

class Post extends Model {
  public $timestamps = true;
}

$post = new Post();
$post->save();
This code creates a new Post model instance and saves it, automatically setting timestamps if enabled.
Execution Table
StepActionTimestamps Enabled?created_atupdated_atDatabase Save
1Create new Post instancetruenullnullNo
2Check timestamps enabledtruenullnullNo
3Set created_at and updated_at to nowtrue2024-06-01 12:00:002024-06-01 12:00:00No
4Save Post to databasetrue2024-06-01 12:00:002024-06-01 12:00:00Yes
5Update Post instancetrue2024-06-01 12:00:002024-06-01 12:00:00No
6Check timestamps enabledtrue2024-06-01 12:00:002024-06-01 12:00:00No
7Set updated_at to nowtrue2024-06-01 12:00:002024-06-01 12:05:00No
8Save updated Post to databasetrue2024-06-01 12:00:002024-06-01 12:05:00Yes
9Create new Post with timestamps disabledfalsenullnullNo
10Check timestamps enabledfalsenullnullNo
11Skip timestamp settingfalsenullnullNo
12Save Post to databasefalsenullnullYes
💡 Execution stops after saving models; timestamps are set only if enabled.
Variable Tracker
VariableStartAfter Step 3After Step 4After Step 7After Step 8After Step 11Final
created_atnull2024-06-01 12:00:002024-06-01 12:00:002024-06-01 12:00:002024-06-01 12:00:00nullnull
updated_atnull2024-06-01 12:00:002024-06-01 12:00:002024-06-01 12:05:002024-06-01 12:05:00nullnull
timestamps_enabledtruetruetruetruetruefalsefalse
Key Moments - 3 Insights
Why are created_at and updated_at set to the same time when creating a new model?
When creating a new model, Laravel sets both created_at and updated_at to the current time because the record is new and just created. See execution_table rows 3 and 4.
What happens if timestamps are disabled on a model?
If timestamps are disabled (timestamps_enabled is false), Laravel skips setting created_at and updated_at fields before saving. See execution_table rows 9 to 12.
Why does updated_at change on update but created_at stays the same?
created_at marks when the record was first created and does not change. updated_at updates every time the record changes. See execution_table rows 7 and 8.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3. What are the values of created_at and updated_at?
A"2024-06-01 12:00:00" for both
B"null" for both
C"2024-06-01 12:05:00" for both
D"2024-06-01 12:00:00" for created_at and "null" for updated_at
💡 Hint
Check the 'created_at' and 'updated_at' columns in execution_table row 3.
At which step does the updated_at timestamp get updated after the initial creation?
AStep 4
BStep 3
CStep 7
DStep 11
💡 Hint
Look at the 'updated_at' column changes in execution_table rows 7 and 8.
If timestamps are disabled, what happens to the created_at and updated_at fields when saving?
AThey are set to current time
BThey remain null
COnly updated_at is set
Dcreated_at is set, updated_at remains null
💡 Hint
See execution_table rows 9 to 12 where timestamps_enabled is false.
Concept Snapshot
Laravel models have automatic timestamps: created_at and updated_at.
When $timestamps = true (default), Laravel sets these fields on create and update.
created_at is set once on creation; updated_at updates on every save.
Disable timestamps by setting public $timestamps = false in the model.
Timestamps help track when records were created and last changed.
Full Transcript
In Laravel, models can automatically manage timestamps for creation and updates. When you create a new model instance and save it, Laravel checks if timestamps are enabled. If yes, it sets both created_at and updated_at fields to the current time before saving. When you update the model later, only updated_at changes to the new current time, while created_at remains the same. If you disable timestamps by setting public $timestamps = false in your model, Laravel skips setting these fields. This helps you track when records were created and last updated without manual work.

Practice

(1/5)
1. What does the $timestamps property in a Laravel model control?
easy
A. Whether Laravel automatically manages created_at and updated_at columns
B. The timezone used for timestamps
C. The format of the timestamp columns
D. The database connection for timestamp fields

Solution

  1. Step 1: Understand the role of $timestamps in Laravel models

    The $timestamps property tells Laravel if it should automatically update created_at and updated_at fields when saving records.
  2. Step 2: Identify what $timestamps = false does

    Setting $timestamps = false disables this automatic management, so Laravel won't update those columns.
  3. Final Answer:

    Whether Laravel automatically manages created_at and updated_at columns -> Option A
  4. Quick Check:

    $timestamps controls auto timestamp updates [OK]
Hint: Remember: $timestamps toggles auto timestamp updates [OK]
Common Mistakes:
  • Confusing $timestamps with timezone settings
  • Thinking it changes timestamp format
  • Assuming it sets database connection
2. Which of the following is the correct way to add timestamp columns in a Laravel migration?
easy
A. $table->timestamp();
B. $table->timestamps();
C. $table->timeStamps();
D. $table->addTimestamps();

Solution

  1. Step 1: Recall Laravel migration syntax for timestamps

    Laravel provides a method timestamps() (all lowercase) to add created_at and updated_at columns automatically.
  2. Step 2: Check each option's syntax

    $table->timestamps(); uses the correct method name timestamps(). Options A, B, and D are either incomplete or incorrect method names.
  3. Final Answer:

    $table->timestamps(); -> Option B
  4. Quick Check:

    Migration timestamps method = timestamps() [OK]
Hint: Use exact method timestamps() in migrations [OK]
Common Mistakes:
  • Using singular timestamp() instead of plural
  • Capitalizing method name incorrectly
  • Assuming method is addTimestamps()
3. Given this model code, what will be the value of updated_at after saving a new record?
class Post extends Model {
  public $timestamps = true;
}

$post = new Post();
$post->title = 'Hello';
$post->save();
medium
A. Null because it is a new record
B. An error occurs because updated_at is not set manually
C. Timestamp of the last update before save
D. Current timestamp when save() is called

Solution

  1. Step 1: Understand $timestamps = true effect on saving

    When $timestamps is true, Laravel automatically sets created_at and updated_at to the current time on save.
  2. Step 2: Analyze saving a new record

    On creating a new record, both timestamps get the current time. So updated_at is set to now, not null or error.
  3. Final Answer:

    Current timestamp when save() is called -> Option D
  4. Quick Check:

    New record save updates timestamps automatically [OK]
Hint: New saves set both timestamps to current time [OK]
Common Mistakes:
  • Thinking updated_at is null on new records
  • Assuming manual setting is required
  • Believing an error occurs without manual timestamps
4. You have this migration snippet:
Schema::create('users', function (Blueprint $table) {
  $table->id();
  $table->string('name');
  $table->timestamps;
});

What is the problem here?
medium
A. You must add nullable() to timestamps
B. The timestamps method does not exist
C. Missing parentheses after timestamps method call
D. The id() method should come after timestamps

Solution

  1. Step 1: Check the migration method call syntax

    In Laravel migrations, timestamps() is a method and must be called with parentheses.
  2. Step 2: Identify the error in the code

    The code uses $table->timestamps; without parentheses, so it does not execute the method, causing no timestamp columns to be created.
  3. Final Answer:

    Missing parentheses after timestamps method call -> Option C
  4. Quick Check:

    Method calls need parentheses: timestamps() [OK]
Hint: Always add () when calling migration methods [OK]
Common Mistakes:
  • Forgetting parentheses on method calls
  • Thinking timestamps is a property, not a method
  • Assuming order of columns matters here
5. You want to disable automatic timestamp management for a model but still keep the created_at and updated_at columns in the database. How should you do this?
hard
A. Set public $timestamps = false; in the model and keep $table->timestamps() in migration
B. Remove $table->timestamps() from migration and set $timestamps = false in model
C. Set public $timestamps = true; and manually update timestamps in code
D. Rename created_at and updated_at columns to disable timestamps

Solution

  1. Step 1: Understand disabling timestamps in model

    Setting public $timestamps = false; in the model disables Laravel's automatic update of timestamp columns.
  2. Step 2: Keep timestamp columns in database

    Keeping $table->timestamps() in migration ensures the columns exist in the database even if Laravel does not update them automatically.
  3. Final Answer:

    Set public $timestamps = false; in the model and keep $table->timestamps() in migration -> Option A
  4. Quick Check:

    Disable auto timestamps in model, keep columns in migration [OK]
Hint: Disable in model, keep columns in migration to keep timestamps [OK]
Common Mistakes:
  • Removing timestamps columns from migration when disabling
  • Assuming setting $timestamps to true disables timestamps
  • Renaming columns to disable timestamps
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard