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