Szukaj…


Migracje

Kontrolowanie bazy danych w Laravel polega na migracji. Utwórz migrację za pomocą rzemieślnika:

php artisan make:migration create_first_table --create=first_table

To wygeneruje klasę CreateFirstTable. Wewnątrz metody up możesz tworzyć kolumny:

<?php

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

class CreateFirstTable extends Migration
{
    public function up()
    {
        Schema::create('first_table', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_string_column_name');
            $table->integer('secont_integer_column_name');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('first_table');
    }
} 

Na koniec, aby uruchomić wszystkie klasy migracji, możesz uruchomić polecenie rzemieślnika:

php artisan migrate

Spowoduje to utworzenie tabel i kolumn w bazie danych. Inne przydatne polecenia migracji to:

  • php artisan migrate:rollback - Cofnij ostatnią migrację bazy danych
  • php artisan migrate:reset - Cofnij wszystkie migracje baz danych
  • php artisan migrate:refresh - zresetuj i uruchom ponownie wszystkie migracje
  • php artisan migrate:status - Pokazuje status każdej migracji

Modyfikowanie istniejących tabel

Czasami musisz zmienić istniejącą strukturę tabeli, np. Zmienić renaming/deleting kolumny. Co możesz osiągnąć, tworząc nową migrację. I w up metody migracji.

//Renaming Column.

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('email', 'username');
    });
}

Powyższy przykład zmieni nazwę email column users table na username . Podczas gdy poniższy kod upuszcza username users kolumny z tabeli users .

WAŻNE: Aby zmodyfikować kolumny, należy dodać zależność doctrine/dbal do pliku composer.json projektu i uruchomić composer update aby odzwierciedlić zmiany.

//Droping Column
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('username');
    });
}

Pliki migracji

Migracje w aplikacji Laravel 5 są dostępne w katalogu database/migrations . Ich nazwy plików są zgodne z określonym formatem:

<year>_<month>_<day>_<hour><minute><second>_<name>.php

Jeden plik migracji powinien reprezentować aktualizację schematu, aby rozwiązać konkretny problem. Na przykład:

2016_07_21_134310_add_last_logged_in_to_users_table.php

Migracje baz danych są przechowywane w kolejności chronologicznej, dzięki czemu Laravel wie, w jakiej kolejności je wykonać. Laravel zawsze będzie przeprowadzał migracje od najstarszych do najnowszych.

Generowanie plików migracji

Tworzenie nowego pliku migracji z poprawną nazwą pliku za każdym razem, gdy trzeba zmienić schemat, byłoby uciążliwe. Na szczęście polecenie artisan Laravela może wygenerować migrację:

php artisan make:migration add_last_logged_in_to_users_table

Można również użyć flag --table i --create za pomocą powyższego polecenia. Są one opcjonalne i tylko dla wygody i wstawią odpowiedni kod płyty zbiorczej do pliku migracji.

php artisan make:migration add_last_logged_in_to_users_table --table=users

php artisan make:migration create_logs_table --create=logs

Możesz określić niestandardową ścieżkę wyjściową dla generowanej migracji za pomocą opcji --path . Ścieżka jest względna do podstawowej ścieżki aplikacji.

php artisan make:migration --path=app/Modules/User/Migrations

Wewnątrz migracji bazy danych

Każda migracja powinna mieć metodę up() i down() . Celem metody up() jest wykonanie wymaganych operacji w celu przywrócenia schematu bazy danych do nowego stanu, a celem metody down() jest odwrócenie wszelkich operacji wykonywanych przez metodę up() . Zapewnienie, że metoda down() poprawnie odwraca operacje, ma kluczowe znaczenie dla możliwości przywrócenia zmian schematu bazy danych.

Przykładowy plik migracji może wyglądać następująco:

<?php

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

class AddLastLoggedInToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dateTime('last_logged_in')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('last_logged_in');
        });
    }
}

Podczas uruchamiania tej migracji Laravel wygeneruje następujący kod SQL, aby uruchomić go z bazą danych:

ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL

Uruchamianie migracji

Po zapisaniu migracji jej uruchomienie spowoduje zastosowanie operacji do bazy danych.

php artisan migrate

Jeśli wszystko pójdzie dobrze, zobaczysz wynik podobny do poniższego:

Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table

Laravel jest wystarczająco sprytny, aby wiedzieć, kiedy przeprowadzasz migrację w środowisku produkcyjnym. Jeśli wykryje, że przeprowadzasz destrukcyjną migrację (na przykład usuwającą kolumnę z tabeli), polecenie php artisan migrate poprosi o potwierdzenie. W środowiskach ciągłej dostawy może nie być to pożądane. W takim przypadku użyj flagi --force aby pominąć potwierdzenie:

php artisan migrate --force

Jeśli tylko uruchomiłeś migracje, możesz być zdezorientowany, widząc obecność tabeli migrations w bazie danych. Ta tabela jest używana przez Laravela do śledzenia, które migracje zostały już uruchomione. Wydając polecenie migrate , Laravel określi, które migracje jeszcze nie zostały uruchomione, a następnie wykona je w kolejności chronologicznej, a następnie zaktualizuje tabelę migrations aby pasowała.

Nigdy nie należy ręcznie edytować tabeli migrations chyba że absolutnie wiesz, co robisz. Bardzo łatwo jest przypadkowo pozostawić bazę danych w stanie uszkodzonym, w którym migracje zakończą się niepowodzeniem.

Cofanie migracji

Co jeśli chcesz cofnąć ostatnią migrację, tj. Ostatnią operację, możesz użyć niesamowitego polecenia rollback . Pamiętaj jednak, że to polecenie przywraca tylko ostatnią migrację, która może obejmować wiele plików migracji

php artisan migrate:rollback

Jeśli chcesz wycofać wszystkie migracje aplikacji, możesz użyć następującego polecenia

php artisan migrate:reset 

Ponadto, jeśli jesteś leniwy jak ja i chcesz wycofać się i przeprowadzić migrację za pomocą jednego polecenia, możesz użyć tego polecenia

php artisan migrate:refresh
php artisan migrate:refresh --seed

Możesz również określić liczbę kroków do wycofania za pomocą opcji step . W ten sposób cofniesz się o 1 krok.

php artisan migrate:rollback --step=1


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow