SQLSTATE[42S22]: Column not found: 1054 Unknown column created_at and updated_at column missing
Stefan Bogdanescu
Founder & Senior Architect · 2026-06-29
Decoding SQLSTATE[42S22]: Why Eloquent Demands created_at and updated_at
As senior developers working with Laravel and Eloquent, we often encounter cryptic database errors. One particularly common and frustrating error is: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list'. This error signals a fundamental mismatch between what your application (Eloquent) expects the database to look like, and what the actual database schema provides.
This post will dive deep into why Eloquent tries to insert created_at and updated_at columns when you believe they don't exist, and more importantly, how to ensure your database migrations are correctly set up for robust application development.
The Mystery of Missing Timestamps
The error message you are seeingâUnknown column 'updated_at' in 'field list'âoccurs because Eloquent, by default, attempts to automatically manage the creation and updating timestamps on every model instance. When you call methods like create() or save(), Eloquent attempts to insert these timestamp values into the SQL query.
The core problem is this: Eloquent assumes these columns exist in your table, but the underlying database schema (your migration) does not define them.
In your provided context, when you execute $this->building->create($buildings);, Eloquent constructs an INSERT statement that includes these fields:
insert into buildings (building_name, updated_at, created_at) values (...);If the buildings table in your database schema is missing the created_at and updated_at columns, the database throws an error because it cannot find those specified columns to populate.
How Eloquent Manages Timestamps
Eloquent provides a convenient way to handle these timestamps without manually managing them in your repository or controller logic. This functionality is typically enabled by adding the timestamps() method to your Eloquent models.
When you use this feature, Eloquent handles setting these values automatically whenever a model is saved or updated. This pattern is fundamental to leveraging the power of an ORM like Laravelâs Eloquent framework. For more advanced insights into how Laravel structures its data layer, understanding the underlying principles of Eloquent is key, as detailed on the official Laravel documentation.
The Solution: Fixing Your Database Schema
The solution to this issue is not in your repository or controller code; it lies entirely within your database migrations. You must explicitly tell the database that these two columns exist before Eloquent attempts to use them.
Step 1: Verify and Update Migrations
You need to ensure that when you created the migration for your buildings table, you included the necessary timestamp columns.
If you are starting a new model or fixing an existing one, generate a fresh migration:
php artisan make:migration add_timestamps_to_buildings_table --table=buildingsThen, update the generated migration file (e.g., database/migrations/..._add_timestamps_to_buildings_table.php) to include the timestamp columns:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\SchemaBuilder;
class AddTimestampsToBuildingsTable extends Migration
{
public function up()
{
SchemaBuilder::table('buildings', function (SchemaBuilder $table) {
// Add the timestamps here
$table->timestamps();
});
}
public function down()
{
SchemaBuilder::table('buildings', function (SchemaBuilder $table) {
// Rollback
$table->dropTimestamps();
});
}
}After making this change, run your migrations to apply the schema update:
php artisan migrateStep 2: Ensure Model Configuration
Finally, confirm that your Building.php model correctly signals to Eloquent that it should manage these timestamps. This is done by ensuring the timestamps property is set to true (which is the default):
namespace App;
use Illuminate\Database\Eloquent\Model;
class Building extends Model
{
// This ensures Eloquent knows to manage created_at and updated_at
public $timestamps = true;
protected $fillable = [
'id', 'building_name', 'building_information', 'building_image',
];
}By correctly defining the schema via migrations and ensuring your Eloquent models are configured, you eliminate this error and establish a solid foundation for managing relational data in Laravel.
Conclusion
The SQLSTATE[42S22] error is a classic reminder that application logic must align perfectly with database structure. In the world of ORMs like Eloquent, the framework relies on the database schema to function correctly. Always treat your migrations as the single source of truth for your table structures. By ensuring timestamps() are included in your migration files and confirming model settings, you ensure that your application remains clean, robust, and fully compliant with Laravel's conventions.