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