Migracje Laravel – zaawansowane operacje na tabelach

Migracje Laravel – zaawansowane operacje na tabelach

Migracje to operacje bazodanowe, które w Laravelu obejmują tworzenie i usuwanie tabel, czy przywracanie konkretnych wersji struktur baz danych. To pewien rodzaj kontrolowania wersji bazy danych, co przekłada się na łatwość modyfikowania i udostępniania schematów. 

Migracje najczęściej łączone są z narzędziami do tworzenia schematów, tak aby ułatwić zarządzanie nimi. Praktyczne zastosowania? Jeśli kiedykolwiek poleciłeś komuś, aby ręcznie dodał kolumnę do schematu lokalnej bazy danych, to właśnie tutaj migracje przychodzą z pomocą.

Generowanie migracji

Aby utworzyć migrację w Laravelu, należy zacząć od polecenia make:migration w Artisanie:

php artisan make:migration create_users_table

Utworzona w ten sposób migracja zostanie umieszczona w katalogu bazy danych. Zwróć uwagę na to, że każda nazwa pliku migracji będzie posiadała sygnaturę czasową, która później ułatwi określić ich kolejności. 

Opcji –table oraz –create możesz używać do wskazywania nazwy tabeli lub określania, czy podczas migracji ma zostać utworzona nowa tabela. Obie wstępnie wypełniają generowany plik określoną tabelą:

php artisan make:migration create_users_table –create=users

php artisan make:migration add_votes_to_users_table –table=users

Natomiast jeśli chcesz określić niestandardową ścieżkę dla migracji, skorzystaj z opcji –path podczas wykonywania polecenia make:migration.

Squashing

Squashing to proces polegający na przyjmowaniu wielu zatwierdzeń i łączeniu ich w jedno, obejmujące wszystkie zmiany. Tworząc aplikacje, będziesz mieć do czynienia z dużą ilością migracji, co może prowadzić do rozrastania się katalogu migracji do całkiem sporych rozmiarów. Potencjalnie mogą to być setki migracji! Aby ograniczyć te ilości, „upchniesz” wszystkie migracje do jednego pliku SQL korzystając z polecenia schema:dump.

php artisan schema:dump

// Porzucenie bieżącego schematu i wyczyszczenie istniejących migracji…

php artisan schema:dump –prune

Po wykonaniu tego polecenia Laravel zapisze plik schematu do katalogu database / schema. Teraz podczas próby migracji bazy danych Laravel w pierwszej kolejności posłuży się plikiem schematu SQL. Po wykonaniu poleceń pliku schematu zostaną wykonane wszelkie pozostałe migracje.

Squashing przy migracjach dostępny jest dla MySQL, PostgreSQL, and SQLite databases.

Struktura migracji

Klasa migracji zawiera dwie metody: up oraz down. Up wykorzystywana jest do dodawania nowych tabel, kolumn lub indeksów do baz danych. Metoda down to odwrotność operacji wykonywanych przez metodę up.

Obie metody mogą być wykorzystywane wraz z kreatorem schematów Laravel, co pozwala ekspresowo tworzyć i modyfikować tabele. Poniższy przykład z dokumentacji Laravela pokazuje, jak migracja tworzy tabelę lotów:

<?php

use Illuminate\Database\Migrations\Migration;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Support\Facades\Schema;

class CreateFlightsTable extends Migration

{

    /**

     * Run the migrations.

     *

     * @return void

     */

    public function up()

    {

        Schema::create(’flights’, function (Blueprint $table) {

            $table->id();

            $table->string(’name’);

            $table->string(’airline’);

            $table->timestamps();

        });

    }

    /**

     * Reverse the migrations.

     *

     * @return void

     */

    public function down()

    {

        Schema::drop(’flights’);

    }

}

Uruchomienie migracji

W celu uruchomienia wszystkich migracji wykonaj polecenie migrate w Artisanie:

php artisan migrate

Pamiętaj o tym, że jeśli korzystasz z maszyny wirtualnej Homestrad powinieneś wykonać polecenie z jej poziomu.

Pozostałe możliwości dotyczące operacji na tabelach, kolumnach oraz indeksach opiszemy w kolejnym wpisie. Jeśli masz jakieś pytania lub sugestie dotyczące kolejnych tekstów, dodaj komentarz lub skontaktuj się z nami przez formularz w zakładce kontaktowej.

Udostępnij ten post

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.