Dodaj nową kolumnę do istniejącej tabeli podczas migracji

Naprawdę nie mogę dowiedzieć się, jak dodać nową kolumnę do mojej tabeli wyjścia w mojej bazie danych przy użyciu PHP Laravel framework.

Próbowałem edytować plik migracji do

 public function up()
{
    Schema::create('users', function($table){

         $table->integer("paid");


    });
}

Oraz w Terminalu php artisan migrate:install i migrate

Jak dodać nowe kolumny?

Author: Peter verleg, 2013-05-28

8 answers

Aby utworzyć migrację, możesz użyć polecenia migrate:make W Artisan CLI. Użyj konkretnej nazwy, aby uniknąć zderzenia z istniejącymi modelami

Dla Laravel 3:

php artisan migrate:make add_paid_to_users

Dla Laravel 5+:

php artisan make:migration add_paid_to_users

Następnie musisz użyć metody Schema::table() (ponieważ uzyskujesz dostęp do istniejącej tabeli, a nie tworzysz nową). I możesz dodać taką kolumnę:

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

I nie zapomnij dodać opcji rollback:

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

Wtedy możesz uruchomić swój migracje:

php artisan migrate

To wszystko jest dobrze opisane w dokumentacji dla obu Laravel 3:

I dla Laravel 4 / Laravel 5:

Edit:

Użyj $table->integer('paid')->after(whichever_column);, aby dodać To pole po określonej kolumnie.

 337
Author: Phill Sparks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-24 11:52:24

Dodam do odpowiedzi mike3875 dla przyszłych czytelników korzystających z Laravel 5.1 i dalej.

Aby przyspieszyć, możesz użyć flagi "--table " w następujący sposób:

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

Spowoduje to automatyczne dodanie zawartości metody up i down:

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

Podobnie, możesz użyć opcji --create["table_name"] podczas tworzenia nowych migracji, które dodadzą więcej boilerplate do Twoich migracji. Mały punkt, ale pomocny przy robieniu ich wielu!

 40
Author: camelCase,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-12 14:29:50

Jeśli używasz Laravel 5, komenda będzie;

php artisan make:migration add_paid_to_users

Wszystkie polecenia do tworzenia rzeczy (Kontrolery, modele, migracje itp.) zostały przeniesione pod make:.

php artisan migrate to wciąż to samo.

 24
Author: mikelovelyuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 11:38:57

Możesz dodać nowe kolumny w początkowej metodzie Schema::create w następujący sposób:

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

Jeśli już utworzyłeś tabelę, możesz dodać do niej dodatkowe kolumny, tworząc nową migrację i używając metody Schema::table:

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

Dokumentacja jest dość dokładna i nie zmieniła się zbytnio z w wersji 3 na w wersji 4 .

 14
Author: tplaner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-28 12:26:44

Możesz po prostu zmodyfikować istniejący plik migracji, na przykład dodając kolumnę w tabeli, a następnie w terminalu wpisując:

$ php artisan migrate:refresh
 8
Author: Mahana Delacour,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-17 14:01:42

Laravel 5.6

W przypadku, gdy chcesz dodać nową kolumnę jako klucz obcy do istniejącej tabeli.

Utwórz nową migrację wykonując następujące polecenie: make: migration

Przykład:

php artisan make:migration add_store_id_to_users_table --table=users

W folderze database / migrations masz nowy plik migracji, coś w stylu:

2018_08_08_093431_add_store_id_to_users_table.php (Zobacz komentarze)

<?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');
        });
    }
}

Następnie uruchom polecenie :

php artisan migrate

Jeśli chcesz cofnąć ostatnią migrację z jakiegokolwiek powodu, uruchom to polecenie:

php artisan migrate:rollback

Więcej informacji na temat migracji można znaleźć w docs
 3
Author: chebaby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-08 10:34:58

To działa na laravel 5.1.

Najpierw na twoim terminalu wykonaj ten kod

php artisan make:migration add_paid_to_users --table=users

Następnie przejdź do katalogu projektu i rozwiń bazę katalogów-migracja i edycja pliku add_paid_to_users.php, dodaj ten kod

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

Następnie wróć do terminala i wykonaj to polecenie

php artisan migrate
Mam nadzieję, że to pomoże.
 2
Author: Rosidin Bima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-27 11:26:29

Najpierw wycofaj poprzednią migrację

php artisan migrate:rollback

Następnie możesz zmodyfikować istniejący plik migracji (dodać nowe , zmienić nazwę lub usunąć kolumny), a następnie ponownie uruchomić plik migracji

php artisan migrate
 0
Author: noobgrammer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-26 06:52:24