SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value (SQL: insert into `cats` (`updated_at`, `created_at`)

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company

Decoding the Error: Solving SQLSTATE[HY000]: Field 'name' doesn't have a default value in Laravel

As developers working with relational databases via an ORM like Eloquent, we often encounter frustrating runtime errors that bridge the gap between our application logic and the underlying database schema. One of the most common issues encountered during data insertion is the SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value.

This error, while seemingly simple, signals a fundamental mismatch between what your Laravel application expects to insert and what the underlying MySQL/PostgreSQL database requires. As senior developers, our job is not just to fix the error but to understand the systemic cause. This post will dissect why this error occurs in a Laravel context, focusing on Eloquent models, migrations, and best practices.

Understanding the Error at a Glance

The provided error message:

sql
SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value (SQL: insert into `cats` (`updated_at`, `created_at`) values (...))

tells us that the database received an instruction to insert data, but it failed because one of the required columns in the cats table—specifically the name column—was omitted from the INSERT statement, and crucially, the database schema does not define a default value for this field.

In essence: The application is asking the database to save a value for name, but the database structure doesn't allow it.

Root Cause Analysis in Laravel/Eloquent

When we examine the provided code snippets, several potential pitfalls emerge that lead to this error:

  1. Model Mismatch (The Naming Convention Issue): Your model definition shows you are using the attribute nama:

    php
    protected $fillable  = ['nama'];

    However, your controller attempts to pass data for a field named name (based on how it’s being mapped in $form_data). Eloquent relies heavily on these conventions. If you try to save a value for a column that doesn't exist or isn't defined correctly, this issue arises.

  2. Migration Deficiency (The Schema Issue): The most direct cause of the error is usually the database migration. If you are trying to insert data into a column named name, that column must exist in the cats table and must either be nullable or possess a defined default value (DEFAULT '' or similar) if it is not provided during insertion.

  3. Mass Assignment Misuse: In your controller, you are building $form_data. If this array contains keys that do not match the actual columns in the database (or don't match what $fillable allows), Eloquent might struggle or default to omitting required fields.

Step-by-Step Solution and Best Practices

To resolve this reliably, we must address both the application code (Eloquent) and the database schema (Migrations). Following Laravel best practices, especially those highlighted by the team at laravelcompany.com, ensures robust data handling across your stack.

Step 1: Correcting the Database Migration

Before writing any more application code, ensure your migration correctly