whizzzzz
whizzzzz

Reputation: 27

Laravel 5.6 set migration nullable foreign id

This error popup:

#1452 - Cannot add or update a child row: a foreign key constraint fails (`ltfrbr10infosystem`.`franchises`, CONSTRAINT `franchises_operator_id_foreign` FOREIGN KEY (`operator_id`) REFERENCES `operators` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

Laravel Migrration:

public function up()
{
    Schema::create('franchises', function (Blueprint $table) {
        $table->increments('id');

        $table->integer('operator_id')->nullable()->unsigned();
        $table->foreign('operator_id')->references('id')->on('operators')->onDelete('cascade')->onUpdate('cascade');

        $table->string('case_number')->nullable();
        $table->string('business_address')->nullable();
        $table->date('date_granted')->nullable();
        $table->date('expiry_date')->nullable();
        $table->string('route_name')->nullable();
        $table->string('deno')->nullable();
        $table->integer('authorize_units')->nullable();
        $table->string('remarks')->nullable();
        $table->timestamps();
    });
}

I have tried this but still it gives me error

$table->integer('operator_id')->nullable()->unsigned()->change();

I also tried this

$table->integer('operator_id')->unsigned()->default(null);

How do I make operator_id foreign key default to null?

Upvotes: 0

Views: 2520

Answers (4)

shabi
shabi

Reputation: 31

you should use this

$table->foreign('operator_id')->references('id')->on('operators')->nullable()->onDelete('cascade')->onUpdate('cascade');

Upvotes: 0

Lim Kean Phang
Lim Kean Phang

Reputation: 501

Add this inside up function and run php artisan migrate:refresh --seed

public function up(){

    Schema::disableForeignKeyConstraints();
    Schema::create('franchises', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('operator_id')->unsigned()->nullable();
    $table->foreign('operator_id')->references('id')->on('operators')->onDelete('cascade')->onUpdate('cascade');
    $table->string('case_number')->nullable();
    $table->string('business_address')->nullable();
    $table->date('date_granted')->nullable();
    $table->date('expiry_date')->nullable();
    $table->string('route_name')->nullable();
    $table->string('deno')->nullable();
    $table->integer('authorize_units')->nullable();
    $table->string('remarks')->nullable();
    $table->timestamps();
});Schema::enableForeignKeyConstraints();}

Upvotes: 0

Piazzi
Piazzi

Reputation: 2636

If the data on your database is not important you could refresh your migrations and your database using

php artisan migrate:refresh

This will rollback and migrate all your migrations again. Make sure you wrote the down method right, also, you migration should look like this:

public function up()
{
    Schema::create('franchises', function (Blueprint $table) {
        $table->increments('id');

        $table->unsignedInteger('operator_id')->nullable();
        $table->foreign('operator_id')->references('id')->on('operators')->onDelete('cascade')->onUpdate('cascade');

        $table->string('case_number')->nullable();
        $table->string('business_address')->nullable();
        $table->date('date_granted')->nullable();
        $table->date('expiry_date')->nullable();
        $table->string('route_name')->nullable();
        $table->string('deno')->nullable();
        $table->integer('authorize_units')->nullable();
        $table->string('remarks')->nullable();
        $table->timestamps();
    });
}

Other way to do it is creating a new migration like this:

public function up()
{
    Schema::table('franchises', function (Blueprint $table) {

        $table->unsignedInteger('operator_id')->nullable()->change();


    });
}

Upvotes: 1

Florian Laforgue
Florian Laforgue

Reputation: 299

I think you get this error because the record you are trying to insert contains a wrong value for the column operator_id. This value is not a correct operator id and is not null (it could be 0, "null" or empty string, ...)

Can you paste here the exact SQL query which rises this error ?

Upvotes: 0

Related Questions