Make column not nullable in a Laravel migration

PhpSqlDatabase MigrationLaravel

Php Problem Overview


I'm writing a migration to make certain columns in a table nullable right now. For the down function, I of course want to make those columns not nullable again. I looked through the schema builder docs, but couldn't see a way to do this.

Any help would be appreciated.

Php Solutions


Solution 1 - Php

Prior to Laravel 5, there was no Laravel native way of altering an existing table column using the schema builder. You'd need to use raw queries for this.

However, as of Laravel 5 you can use:

$table->string('foo')->nullable(false)->change();

You must have the dbal dependency prior to running the above command:

composer require doctrine/dbal

Solution 2 - Php

As of Laravel 5 it's possible to reverse this by passing false as an argument to nullable.

$table->string('foo')->nullable(false)->change();

Solution 3 - Php

First run this:

composer require doctrine/dbal

Then create a migration that will alter the table like so:

php artisan make:migration fix_whatever_table_name_here

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->nullable(false)->change();
    });
}

# Optional:
# public function down()
# {
#     Schema::table('table_name', function ($table) {
#         $table->type('column')->nullable()->change();
#     });
# }

Solution 4 - Php

You can just declare the column again without ->nullable() and use ->change

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->change();
    });
}

public function down()
{
    Schema::table('table_name', function ($table) {
        $table->type('column')->nullable()->change();
    });
}

Solution 5 - Php

In laravel 8, you just have to put this: "->nullable()"

$table->string('name')->nullable(); 

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionbilalqView Question on Stackoverflow
Solution 1 - PhpTLGregView Answer on Stackoverflow
Solution 2 - PhpMatt McDonaldView Answer on Stackoverflow
Solution 3 - PhpfunerrView Answer on Stackoverflow
Solution 4 - PhpGabriel FernandezView Answer on Stackoverflow
Solution 5 - PhpSylarView Answer on Stackoverflow