Änderung des Feldtyps der Laravel-Migrationstabelle
Lesezeit: 5 Minuten
naing linhtut
Nachfolgend meine Datei 2015_09_14_051851_create_orders_table.php. Und ich will mich ändern $table->integer('category_id'); als Zeichenfolge mit neuer Migration.
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateOrdersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('orders', function(Blueprint $table)
{
$table->increments('id');
$table->string('num');
$table->integer('user_id');
$table->text('store_name');
$table->integer('store_name_publication');
$table->string('postal_code', 255);
$table->string('phone_number', 255);
$table->text('title');
$table->text('description');
$table->string('list_image_filename1', 255);
$table->string('list_image_filename2', 255)->nullable();
$table->string('list_image_filename3', 255)->nullable();
$table->string('list_image_filename4', 255)->nullable();
$table->string('list_image_filename5', 255)->nullable();
$table->integer('term');
$table->datetime('state0_at')->nullable();
$table->datetime('state1_at')->nullable();
$table->datetime('state2_at')->nullable();
$table->datetime('state3_at')->nullable();
$table->datetime('state4_at')->nullable();
$table->datetime('state5_at')->nullable();
$table->datetime('state6_at')->nullable();
$table->datetime('state7_at')->nullable();
$table->datetime('state8_at')->nullable();
$table->datetime('state9_at')->nullable();
$table->datetime('state10_at')->nullable();
$table->integer('category_id');
$table->integer('target_customer_sex');
$table->integer('target_customer_age');
$table->integer('payment_order');
$table->integer('num_comment');
$table->integer('num_view');
$table->string('num_pop');
$table->integer('money');
$table->integer('point');
$table->datetime('closed_at');
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('orders');
}
}
$table->string('category_id');
– Aldrin27
5. Oktober 2015 um 2:43 Uhr
Nein, ich möchte nur diesen Typ mit der anderen Migrationsdatei 2015_10_05_021049_change_category_id_to_orders_table ändern
Immer noch in Laravel 5.5 verwendbar für alle, die sich fragen. (da diese Antwort schon ein paar Jahre alt ist)
– Bert H
5. Juni 2018 um 8:04 Uhr
Ja. Sie können es von hier aus überprüfen Spalte ändern ( Laravel 5.5)
– Mininoz
6. Juni 2018 um 3:21 Uhr
Wie kann ich die Zeichenfolge in int ändern und den Standardwert hinzufügen? Ich habe das versucht, aber PostgreSQL gibt einen Cast-Fehler aus. $table->integer('score')->default(0)->change();
– bhattraideb
23. Juli 2020 um 12:49 Uhr
Francisco Corrales Morales
Die Standardlösung funktionierte bei mir nicht, beim Ändern des Typs von TEXT zu LANGTEXT.
Ich musste es so machen:
public function up()
{
DB::statement('ALTER TABLE mytable MODIFY mycolumn LONGTEXT;');
}
public function down()
{
DB::statement('ALTER TABLE mytable MODIFY mycolumn TEXT;');
}
Dies könnte ein Doktrinenproblem sein. Mehr Informationen hier.
Eine andere Möglichkeit besteht darin, die Methode string() zu verwenden und den Wert auf die maximale Länge des Texttyps festzulegen:
Schema::table('mytable', function ($table) {
// Will set the type to LONGTEXT.
$table->string('mycolumn', 4294967295)->change();
});
Dies ist besonders nützlich für DECIMAL-Spalten.
– dmm
9. Januar 2017 um 15:15 Uhr
Ich kann dieses Verhalten bestätigen. Um eine Spalte von Text zu Mediumtext zu ändern, musste ich Folgendes tun: $table->string(‘messages’, 16777215)->nullable()->change();
– Antonio
12. Januar 2018 um 20:12 Uhr
$table->longText('mycolumn')->change();
– Rockin4Life33
18. März 2019 um 22:42 Uhr
Dies ist eine gute Lösung, da Laravel-Migrationen das Ändern eines anderen Feldtyps nicht unterstützen, wenn es ein anderes ENUM-Feld in derselben Tabelle gibt.
– Thiago Elias
28. September 2019 um 18:36 Uhr
Aber es kann den Test nicht ausführen
– Raycoder
16. August 2021 um 3:32 Uhr
2018 Lösung, aber noch andere Antworten sind gültig Sie müssen keine Abhängigkeit verwenden:
Müssen Sie nicht immer noch die Abhängigkeit “doctrine/dbal” verwenden?
– Abhay Maurya
21. Juni 2019 um 7:25 Uhr
Dies ist meiner Meinung nach die einzig richtige Antwort. Da Migrationsdateien neben ihrem Hauptzweck der Schemaänderung auch der Dokumentation und Versionierung von DB-Schemaänderungen dienen, ist hier die separate Migrationsdatei ein Muss.
– Valentine Shi
13. Juli 2019 um 7:38 Uhr
Du brauchst immernoch doctrine/dbal.
– Theodore R. Smith
18. Oktober 2019 um 15:58 Uhr
Das Doktrin/dbal-Paket ist erforderlich.
– golcha21
21. Juli 2020 um 12:12 Uhr
alle anderen Antworten sind richtig Aber Bevor du rennst
php artisan migrate
Stellen Sie sicher, dass Sie diesen Code zuerst ausführen
composer require doctrine/dbal
um diesen Fehler zu vermeiden
RuntimeException : Das Ändern von Spalten für die Tabelle “items” erfordert Doctrine DBAL; installiere “doctrine/dbal”.
Mehdi Kord
Erster Komponist erfordert doctrine/dbaldann:
$table->longText('column_name')->change();
Lewis
Nicht wirklich eine Antwort, sondern nur eine Anmerkung dazu ->change():
Nur die folgenden Spaltentypen können „geändert“ werden: bigInteger, binary, boolean, date, dateTime, dateTimeTz, decimal, integer, json, longText, mediumText, smallInteger, string, text, time, unsignedBigInteger, unsignedInteger und unsignedSmallInteger.
$table->string('category_id');
– Aldrin27
5. Oktober 2015 um 2:43 Uhr
Nein, ich möchte nur diesen Typ mit der anderen Migrationsdatei 2015_10_05_021049_change_category_id_to_orders_table ändern
– nainglinhtut
5. Oktober 2015 um 2:44 Uhr