Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

"nullable" database column gives error "cannot be null" when creating a new row

I am in despair. I’ve already invested hours and just can’t get any further. Maybe someone can help me.

There is a Model called "Ladders". In my migrations I create a nullable "description" field. I’ve run the migration.

Schema::create('ladders', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('slug')->unique;
    $table->text('description')->nullable;
    $table->date('date_start');
    $table->date('date_end');
    $table->timestamps();
});

In my Model Ladder.php the field is defined as "fillable".

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

protected $fillable = [
    'name',
    'slug',
    'description',
    'date_start',
    'date_end'
];

In the respective Controller I have the default store method. It should validate my POST request and create a new entry in the database.

public function store(Request $request)
{
    $request->validate([
        'name' => 'required',
        'slug' => 'prohibited',
        'description' => 'nullable|string',
        'date_start' => 'required|date',
        'date_end' => 'required|date|after:start_date'
    ]);

    $request['slug'] = Str::slug($request->name);

    return Ladder::create($request->all());
}

But I’m getting the following error messages, when trying to create a new entry via API endpoint.

When I omit the "description" completely from the request:

SQLSTATE[HY000]: General error: 1364 Field 'description' doesn't have a default value (SQL: insert into `ladders` (`name`, `date_start`, `date_end`, `slug`, `updated_at`, `created_at`) values (Test Name, 2020-10-08, 2020-10-08, test-name, 2022-11-05 22:33:33, 2022-11-05 22:33:33)) 

When I submit the "description" field with my request, but leave it empty:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'description' cannot be null (SQL: insert into `ladders` (`name`, `date_start`, `date_end`, `description`, `slug`, `updated_at`, `created_at`) values (Test Name, 2020-10-08, 2020-10-08, ?, test-name, 2022-11-05 22:30:54, 2022-11-05 22:30:54)) 

I don’t get it. If the field is defined as "nullable" can’t I just omit it in a request? What am I doing wrong?

I tried to get rid of the validation. But this is not what I want, the data should be validated, when given.

I tried to send non empty strings, then it’s obviously working. But I would like to be able to omit this field.

>Solution :

If im not mistaken… u gotta use ->nullable(); and not nullable;

and return Ladder::create($request->all()); returns the UNVALIDATED data safe it in a variable like $validated and then go like Ladder::create($validated)

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading