Änderung des Feldtyps der Laravel-Migrationstabelle

Lesezeit: 5 Minuten

Benutzer-Avatar
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

    – nainglinhtut

    5. Oktober 2015 um 2:44 Uhr


Benutzer-Avatar
mininoz

Update: 31. Okt. 2018, Noch verwendbar auf Laravel 5.7 https://laravel.com/docs/5.7/migrations#modifying-columns

Um einige Änderungen an der vorhandenen Datenbank vorzunehmen, können Sie den Spaltentyp ändern, indem Sie verwenden change() bei der Migration.

Das könnten Sie tun

Schema::table('orders', function ($table) {
    $table->string('category_id')->change();
});

Bitte beachten Sie, dass Sie hinzufügen müssen Lehre/dbal Abhängigkeit zu composer.json Weitere Informationen finden Sie hier http://laravel.com/docs/5.1/migrations#modifying-columns

  • Jetzt verwende ich Laravel 4.2

    – nainglinhtut

    5. Oktober 2015 um 4:06 Uhr

  • 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

Benutzer-Avatar
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:

Zuerst müssen Sie eine neue Migration erstellen:

php artisan make:migration change_appointment_time_column_type

Dann in dieser Migrationsdatei up()Versuchen:

    Schema::table('appointments', function ($table) {
        $table->string('time')->change();
    });

Wenn Sie nichts ändern, wird die Standardgröße verwendet varchar(191) aber wenn Sie die Größe des Feldes ändern möchten:

    Schema::table('appointments', function ($table) {
        $table->string('time', 40)->change();
    });

Migrieren Sie dann die Datei wie folgt:

php artisan migrate

mehr Infos von doc.

  • 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”.

Benutzer-Avatar
Mehdi Kord

Erster Komponist erfordert doctrine/dbaldann:

$table->longText('column_name')->change();

Benutzer-Avatar
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.

https://laravel.com/docs/5.8/migrations#modifying-columns

Wenn Ihre Spalte keine davon ist, müssen Sie entweder die Spalte löschen oder die alter-Anweisung verwenden, wie in anderen Antworten erwähnt.

Benutzer-Avatar
Francisco Corrales Morales

Für mich war die Lösung nur ersetzen ohne Vorzeichen mit Index

Dies ist der vollständige Code:

    Schema::create('champions_overview',function (Blueprint $table){
        $table->engine="InnoDB";
        $table->increments('id');
        $table->integer('cid')->index();
        $table->longText('name');
    });


    Schema::create('champions_stats',function (Blueprint $table){
        $table->engine="InnoDB";
        $table->increments('id');
        $table->integer('championd_id')->index();
        $table->foreign('championd_id', 'ch_id')->references('cid')->on('champions_overview');
    });

1344750cookie-checkÄnderung des Feldtyps der Laravel-Migrationstabelle

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy