Blok 3 · rozdział 7
Baza danych i migracje
W tym bloku szczyty trafiają do MySQL. Strukturę tabel opisujesz migracją, czyli plikiem PHP,
który na każdym stanowisku uruchomisz tym samym poleceniem
php artisan migrate.
Po tym rozdziale powinieneś umieć
- założyć bazę
koronai wpisać ją do.env; - odróżnić migrację od ręcznego klikania tabeli tylko w phpMyAdmin;
- utworzyć
pasmaiszczytyz kluczem obcym; - cofnąć ostatnią migrację, gdy schemat jest zły, i puścić ją ponownie.
1. Baza i .env
- Włącz MySQL w Laragonie.
- W HeidiSQL albo phpMyAdmin utwórz pustą bazę
korona. Kodowanie:utf8mb4_unicode_ci. - W
.envustaw dostęp. W Laragonie użytkownikrootczęsto nie ma hasła.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=korona
DB_USERNAME=root
DB_PASSWORD=
php artisan config:clear
migrate miał ten sam schemat.
2. Pierwsze migrate
php artisan migrate
Laravel zakłada własne tabele: users, cache, jobs i tabelę migracji,
która pamięta, które pliki już poszły. W phpMyAdmin mają być widoczne, jeszcze bez szczytów.
Sesja może zostać plikowa. Nie przełączaj SESSION_DRIVER z powrotem na database.
Plikowa sesja jest dla tego kursu wystarczająca.
3. Tabela pasm
php artisan make:migration create_pasma_table
W nowym pliku w database/migrations metoda up:
Schema::create('pasma', function (Blueprint $table) {
$table->id();
$table->string('nazwa');
$table->string('slug')->unique();
$table->timestamps();
});
down zostaw z Schema::dropIfExists('pasma') — generator zwykle to wpisuje.
Potem php artisan migrate.
up tworzy albo zmienia tabelę.
down cofa tę zmianę. Plików migracji, które już weszły na bazę, nie poprawiasz „w miejscu”,
jeśli ktokolwiek je uruchomił — dodajesz nową migrację albo, na samych zajęciach, robisz rollback i edytujesz, zanim w tabeli są dane.
4. Tabela szczytów i klucz obcy
php artisan make:migration create_szczyty_table
Schema::create('szczyty', function (Blueprint $table) {
$table->id();
$table->foreignId('pasmo_id')->constrained('pasma')->cascadeOnDelete();
$table->string('nazwa');
$table->string('slug')->unique();
$table->unsignedSmallInteger('wysokosc_m');
$table->text('opis')->nullable();
$table->timestamps();
});
foreignId('pasmo_id')->constrained('pasma') to klucz obcy do pasma.id.
Nazwę tabeli podajesz wprost, bo Laravel od słowa pasmo_id szukałby tabeli pasmos.
cascadeOnDelete() oznacza: skasowanie pasma kasuje jego szczyty.
Na kursie pasm nie kasujesz z palca. Reguła i tak ma być świadoma — znasz ją z integralności referencyjnej.
php artisan migrate
php artisan migrate:rollback cofa ostatnią paczkę, potem poprawiasz up i migrujesz znów.
Struktury nie rzeźbisz obok w phpMyAdmin — następny migrate na innym komputerze o tym nie wiedziałby.
nazwa i wysokosc_m czytasz w phpMyAdmin bez słownika.
Tabela users zostaje po angielsku, bo zakłada ją Laravel, a w bloku 4 rozbuduje ją Breeze.
Gdy php artisan migrate przechodzi, a w phpMyAdmin widać pasma i szczyty:
git add .
git status
git commit -m "Migracje pasm i szczytów"
Przed commitem git status nie pokazuje .env. W historii zostają pliki migracji, nie zrzut bazy.