Laravel-migraties wijzigen standaardwaarde van kolom

Ik heb een tabel waaraan al een standaardwaarde is toegewezen. Als voorbeeld kunnen we naar het volgende kijken:

Schema::create('users', function (Blueprint $table) {
            $table->increments('id')->unsigned();
            $table->integer('active')->default(1);
        });

Ik wil nu mijn standaardwaarde in het actieve veld wijzigen. Ik verwacht zoiets als dit te doen:

if (Schema::hasTable('users')) {
        Schema::table('users', function (Blueprint $table) {
            if (Schema::hasColumn('users', 'active')) {
                $table->integer('active')->default(0);
            }
        });
    }

Maar het vertelt me ​​natuurlijk dat de kolom er al is. Hoe kan ik eenvoudig de standaardwaarde van kolom x bijwerken zonder de kolom te laten vallen?


Antwoord 1, autoriteit 100%

U kunt de change()-methode gebruiken:

Schema::table('users', function ($table) {
    $table->integer('active')->default(0)->change();
});

Voer vervolgens de opdracht migrateuit.

Bijwerken

Gebruik voor Laravel 4 zoiets als dit:

DB::statement('ALTER TABLE `users` CHANGE COLUMN `active` `active` INTEGER NOT NULL DEFAULT 0;');

Binnen up()methode in plaats van Schema::table();clausule.


Antwoord 2, autoriteit 7%

Je moet de wijzigingsfunctieaanroepen om de kolom bij te werken

if (Schema::hasTable('users')) {
    Schema::table('users', function (Blueprint $table) {
        if (Schema::hasColumn('users', 'active')) {
            $table->integer('active')->default(0)->change();
        }
    });
}

Antwoord 3

Maak een nieuw migratiebestand. en gebruik change()

if (Schema::hasTable('users')) {
    Schema::table('users', function (Blueprint $table) {
        if (Schema::hasColumn('users', 'active')) {
            $table->integer('active')->default(0)->change();
        }
    });
}

En zorg er ook voor dat u de doctrine/dbal-afhankelijkheid toevoegt aan uw componist.json-bestand

Other episodes