Sie sollten enum überhaupt nicht verwenden. Selbst mit Laravel 5.8 ist das Problem nicht gelöst.
Vielen Dank an alle, die daran erinnert haben
In der offiziellen Laravel 5.1- Dokumentation heißt es:
Hinweis: Das Umbenennen von Spalten in einer Tabelle mit einer Aufzählungsspalte wird derzeit nicht unterstützt.
Und Sie werden das gleiche Problem haben , wenn verfügbare Optionen Zugabe in enum
Spalte Erklärung.
Es bringt mich zu dem Schluss, dass Sie Enum mit Vorsicht verwenden sollten. oder sogar Sie sollten enum überhaupt nicht verwenden.
Ich kann keine Antwort auf dieses Angebot abgeben, Enum durch String zu ersetzen. NEIN, Sie müssen eine Nachschlagetabelle erstellen und die Aufzählung durch unsignedInteger
als ersetzenforeign key
.
Es ist eine Menge Arbeit und Sie werden verärgert sein, wenn Sie dies nicht ohne vorherige Berichterstattung über Unit-Tests tun, aber dies ist eine richtige Lösung.
Möglicherweise werden Sie sogar entlassen, weil Sie dies richtig gemacht haben, weil es zu lange dauert, aber keine Sorge, Sie werden einen besseren Job finden. :) :)
Hier ist ein Beispiel dafür , wie schwierig wäre es werden Optionen Zugabe in enum
Spalte Erklärung
Sagen Sie, Sie haben dies:
Schema::create('blogs', function (Blueprint $table) {
$table->enum('type', [BlogType::KEY_PAYMENTS]);
$table->index(['type', 'created_at']);
...
und Sie müssen mehr Typen verfügbar machen
public function up(): void
{
Schema::table('blogs', function (Blueprint $table) {
$table->dropIndex(['type', 'created_at']);
$table->enum('type_tmp', [
BlogType::KEY_PAYMENTS,
BlogType::KEY_CATS,
BlogType::KEY_DOGS,
])->after('type');
});
DB::statement('update `blogs` as te set te.`type_tmp` = te.`type` ');
Schema::table('blogs', function (Blueprint $table) {
$table->dropColumn('type');
});
Schema::table('blogs', function (Blueprint $table) {
$table->enum('type', [
BlogType::KEY_PAYMENTS,
BlogType::KEY_CATS,
BlogType::KEY_DOGS,
])->after('type_tmp');
});
DB::statement('update `blogs` as te set te.`type` = te.`type_tmp` ');
Schema::table('blogs', function (Blueprint $table) {
$table->dropColumn('type_tmp');
$table->index(['type', 'created_at']);
});
}