it-swarm.com.de

Fügen Sie einer vorhandenen Tabelle in einer Migration eine neue Spalte hinzu

Ich kann nicht herausfinden, wie ich meiner vorhandenen Datenbanktabelle mit dem Framework Laravel eine neue Spalte hinzufügen kann.

Ich habe versucht, die Migrationsdatei mit ... zu bearbeiten.

<?php

public function up()
{
    Schema::create('users', function ($table) {
        $table->integer("paid");
    });
}

Im Terminal führe ich php artisan migrate:install und migrate aus.

Wie füge ich neue Spalten hinzu?

212
kim larsen

Zum Erstellen einer Migration können Sie den Befehl migrate: make in der Artisan-CLI verwenden. Verwenden Sie einen bestimmten Namen, um Konflikte mit vorhandenen Modellen zu vermeiden

für Laravel 3:

php artisan migrate:make add_paid_to_users

für Laravel 5+:

php artisan make:migration add_paid_to_users

Sie müssen dann die Methode Schema::table() verwenden (wenn Sie auf eine vorhandene Tabelle zugreifen, keine neue erstellen). Und Sie können eine Spalte wie diese hinzufügen:

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('paid');
    });
}

und vergessen Sie nicht, die Rollback-Option hinzuzufügen:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('paid');
    });
}

Dann können Sie Ihre Migrationen ausführen:

php artisan migrate

Dies alles wird in der Dokumentation für Laravel 3 gut behandelt:

Und für Laravel 4/Laravel 5:

Bearbeiten:

verwenden Sie $table->integer('paid')->after('whichever_column');, um dieses Feld nach einer bestimmten Spalte hinzuzufügen.

487
Phill Sparks

Ich werde die Antwort von mike3875 für zukünftige Leser mit Laravel 5.1 und höher ergänzen.

Um die Dinge schneller zu machen, können Sie das Flag "--table" wie folgt verwenden:

php artisan make:migration add_paid_to_users --table="users"

Dadurch werden die Methodeninhalte up und down automatisch hinzugefügt:

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        //
    });
}

In ähnlicher Weise können Sie beim Erstellen neuer Migrationen die Option --create["table_name"] verwenden, um Ihren Migrationen mehr Boilerplate hinzuzufügen. Kleiner Punkt, aber hilfreich, wenn man viele davon macht!

57
camelCase

Wenn Sie Laravel 5 verwenden, lautet der Befehl;

php artisan make:migration add_paid_to_users

Alle Befehle zum Erstellen von Objekten (Controller, Modelle, Migrationen usw.) wurden unter dem Befehl make: verschoben.

php artisan migrate ist jedoch immer noch dasselbe.

24
mikelovelyuk

Sie können neue Spalten in der anfänglichen Schema::create -Methode wie folgt hinzufügen:

Schema::create('users', function($table) {
    $table->integer("paied");
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

Wenn Sie bereits eine Tabelle erstellt haben, können Sie dieser Tabelle zusätzliche Spalten hinzufügen, indem Sie eine neue Migration erstellen und die Schema::table -Methode verwenden:

Schema::table('users', function($table) {
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

Die Dokumentation ist ziemlich gründlich und hat sich von Version zu Version 4 nicht allzu sehr verändert.

17
tplaner

laravel 5.6 und höher

für den Fall, dass Sie einer vorhandenen Tabelle eine neue Spalte als FOREIGN KEY hinzufügen möchten.

Erstellen Sie eine neue Migration, indem Sie den folgenden Befehl ausführen: make: migration

Beispiel:

php artisan make:migration add_store_id_to_users_table --table=users

Im Ordner database/migrations haben Sie eine neue Migrationsdatei, etwa:

2018_08_08_093431_add_store_id_to_users_table.php (siehe die Kommentare)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddStoreIdToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Create new column
            // You probably want to make the new column nullable
            $table->integer('store_id')->unsigned()->nullable()->after('password');

            // 2. Create foreign key constraints
            $table->foreign('store_id')->references('id')->on('stores')->onDelete('SET NULL');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Drop foreign key constraints
            $table->dropForeign(['store_id']);

            // 2. Drop the column
            $table->dropColumn('store_id');
        });
    }
}

Führen Sie danach den Befehl aus:

php artisan migrate

Wenn Sie die letzte Migration aus irgendeinem Grund rückgängig machen möchten, führen Sie den folgenden Befehl aus:

php artisan migrate:rollback

Weitere Informationen zu Migrationen finden Sie in docs

16
chebaby

sie können einfach Ihre vorhandene Migrationsdatei ändern, z. B. eine Spalte in Ihrer Tabelle hinzufügen und dann in Ihrem Terminal Folgendes eingeben:

$ php artisan migrate:refresh
6
Mahana Delacour

dieses ding wird bearbeitet an laravel 5.1.

führen Sie zunächst auf Ihrem Terminal diesen Code aus

php artisan make:migration add_paid_to_users --table=users

gehen Sie danach in Ihr Projektverzeichnis und erweitern Sie die Verzeichnisdatenbank - Migration und bearbeiten Sie die Datei add_paid_to_users.php. Fügen Sie diesen Code hinzu

public function up()
{
    Schema::table('users', function (Blueprint $table) {
         $table->string('paid'); //just add this line
    });
}

danach kehren Sie zu Ihrem Terminal zurück und führen diesen Befehl aus

php artisan migrate

ich hoffe das hilft.

4
Rosidin Bima

Führen Sie zuerst ein Rollback Ihrer vorherigen Migration durch

php artisan migrate:rollback

Anschließend können Sie Ihre vorhandene Migrationsdatei ändern (neue Spalten hinzufügen, umbenennen oder löschen) und Ihre Migrationsdatei erneut ausführen

php artisan migrate
3
noobgrammer

Obwohl eine Migrationsdatei, wie andere bereits erwähnt haben, die beste Vorgehensweise ist, können Sie zur Not auch eine Spalte mit Tinker hinzufügen.

$ php artisan tinker

Hier ist ein Beispiel für einen Einzeiler für das Terminal:

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ $table->integer('paid'); })



(Hier zur besseren Lesbarkeit formatiert)

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ 
    $table->integer('paid'); 
});
0
mfink