2024. november 11., hétfő

13 B Migration

 Az adatbázisok kezelése, míg egyedül dolgozol egy projekten, elég egyértelmű. Ha viszont egy komplex projekten csapatnyi fejlesztő dolgozik, problémás lehet a szerkezeti módosítások követése, egymás között frissen tartása. Az adatbázis migrációk a Laravel query builderére építve tartalmazzák az adatbázisok tábláinak, kapcsolatok beállításainak minden egyes lépését, amik oda-vissza futtathatóak, azaz visszaállíthatóak lépésenként, minden egyes műveletet úgy visszaállítva, mintha meg sem történtek volna. Ha minden egyes változtatáshoz új migrációt veszel fel, a társadnak csak annyi dolga van, hogy frissíti az adatbázist a php artisan migrate paranccsal. E mellett azért is nagyon hasznos a migrációk használata, mert így szintén ennek a parancsnak a kiadásával létre tudod hozni a teljes adatbázist az alkalmazásod telepítésekor. Ezen a migrációk a database/migrations/ mappába kerülnek.

Tehát migration-okat használunk ahhoz, hogy az adatbázisod sémáját, kapcsolatokat, kezdő rekordokat felvedd. Új migrationt az artisan segítségével tudsz létrehozni, a projekt gyökérkönyvtárában a következő parancs kiadásával:

php artisan make:migration create_names_table

Az elnevezést mindig ilyen módon válaszd, tehát létrehozásnál create_, a tábla neve az adatokra utaló és többes számban van, majd az, amit létre akarsz hozni, esetünkben table. Ha módosítani akarsz a szerkezeten, create_ helyett válaszd az alter_ kifejezést vagy pl. új mező beszúrásához az add_mezo_to_tabla_table formát.

Ha kiadtad a parancsot, létrejött a database/migrations/ alatt egy új migration a kért névvel.

A fájlon belül két function jön létre:

up() function

Ez a migration futásakor fog lezajlani, ide kell megírnod azt, amit maga a migration csinál: táblák létrehozását, mezők létrehozását, stb. Tudsz puskázni az alapból létrehozott táblákból, pl a user táblából.

Az Artisan okos és ha a fenti névkonvencióval hoztad létre a migrationt, egyből készített is neked egy megfelelő keretet tábla létrehozásra: a nevét is megadta, adott hozzá egy AUTO_INCREMENT-es elsődleges kulcsot és két speciális mezőt a timestamps segítségével (created_at és updated_at). Ezek a létrehozási és módosítási időt tartalmazzák, amiket az Eloquent automatikusan kitölt az adott rekord létrehozásánál és szerkesztésénél.

down() function

Ez akkor fut le, ha szeretnéd visszaállítani az adott migrationt, azaz visszaállni az adatbázisban egy régebbi verzióra. Tábla létrehozás esetén ez egyértelműen DROP-ot jelent. Ha pl. csak egy új mezőt hozol létre az up()-ban, csak ennek a mezőnek az eltávolítását kell megírni. Ez egyébként nem kötelező, de javallott, hisz így oda-vissza tudsz lépegetni az adatbázisod sémájának állapotai között.

A php artisan make:migration parancsot használva hozhatunk létre egy új migrációt:

php artisan make:migration create_names_table

Keretrendszerek használata esetén az ajánlott formátum, hogy a tábla neveket többes számban hozd létre.

Ez a parancs létrehoz egy új fájlt a database/migrations mappában, amely tartalmazza a create_names_table nevű migrációt.

A migrációs fájl két metódust tartalmaz:

  • up(): Ez a metódus tartalmazza az adatbázis módosításainak logikáját. Ebben a példában egy names táblát hozunk létre, benne néhány alapvető mezővel.

Alapértelmezetten az id-t és az időbélyeget adja hozzá, de itt kiegészítheted:

public function up()  {

        Schema::create('names', function (Blueprint $table) {

            $table->id(); // Elsődleges kulcs (AUTO_INCREMENT)

            $table->string('first_name');

            $table->string('last_name');

            $table->timestamps(); // created_at és updated_at mezők

        });  }

  • down(): Ez a metódus visszaállítja az adatbázist az eredeti állapotba, azaz törli a names táblát.

A migráció futtatásához használd a következő parancsot:

php artisan migrate

Ha valamilyen oszlopot elfelejtettél hozzá adni vissza kell vonni a migrációt:

php artisan migrate:rollback

és hozzá adhatsz új oszlopot a táblához:

php artisan make:migration add_birth_date_to_names_table

Egészítsd ki az új migrációs fájlod up metódusát:

public function up(){

    Schema::table('names', function (Blueprint $table) {

        $table->date('birth_date')->nullable();

    });}

Ezt követően lefuttathatod a migrációt és ha megnézed az adatbázisban a táblád oszlopait, láthatod, hogy új oszloppal került kiegészítsére.

7.1.Schema

A Laravel Schema Builder egy eszköz az adatbázis-táblák és -mezők egyszerű és rugalmas létrehozásához, amely különféle adatbázis-kezelőkkel kompatibilis. Ezzel a megoldással könnyen kezelhetők az adatbázis-sémák a Laravelben, így nem kell aggódnod az adatbázis-kezelők közötti eltérések miatt.

Miért Használjunk Schema Builder-t?

A Laravel támogat több adatbázis-kezelőt, például MySQL-t, PostgreSQL-t és MSSQL-t. Ezek között különbségek lehetnek a mezők típusainál és karakterlánc-kezelésnél. A Schema Builder használatával Laravel automatikusan kezeli ezeket a különbségeket, így az alkalmazásod ugyanúgy működik bármely támogatott adatbázis-kezelőn.

Hogyan Működik a Schema Builder?

A Schema Builder a Schema osztályra épül, amely az adatbázis sémájának kezelését szolgálja. A táblák és mezők létrehozásánál megadhatod:

Az első paraméterként a táblanevet.

A második paraméterként egy ún. Blueprint objektumot, amely tartalmazza a mezők és azok típusainak leírását.

Például a Schema::create('books', function (Blueprint $table) { ... }) létrehozza a books táblát, és az abban lévő mezőket a Blueprint osztályon keresztül definiálhatod.

Mezők és Típusok Meghatározása

A Laravel különféle függvényeket kínál a mezőtípusok beállításához, például:

Szám típusú mező: $table->id(); (automatikusan elsődleges kulcs lesz)

Szöveg típusú mező: $table->string('column_name');

Példák a Típusok és Paraméterek Beállítására

Alapvető szöveges mező létrehozása:

$table->string('name');

Ez egy szöveges (VARCHAR) mezőt hoz létre name névvel.

Nullázható mező:

$table->string('description')->nullable(); //Ez a mező üres (null) értéket is felvehet.

Mező hossza és alapértelmezett érték beállítása:

$table->string('status', 100)->default('active');

Ez egy VARCHAR(100) típusú mezőt hoz létre status névvel és active alapértelmezett értékkel.

Speciális Típusok

Néhány függvény kifejezetten gyakran használt mezőkre vonatkozik, például:

timestamps(): Két mezőt hoz létre: created_at és updated_at, amelyeket a Laravel automatikusan kezel (rekord létrehozásának és módosításának időpontjai).

$table->timestamps();

1.) Feladat: Könyvtár Adatbázis Migráció Létrehozása -> books tábla létrehozása

Ø  id: Elsődleges kulcs (automatikusan létrejön a $table->id()-val).

Ø  title: A könyv címe, string típus.

Ø  author: A szerző neve, string típus.

Ø  published_year: A könyv megjelenésének éve, integer típus.

Ø  genre: A könyv műfaja, string típus.

Ø  created_at és updated_at mezők automatikusan (töltsd ki a $table->timestamps() segítségével).

2.) Feladat: Új mező hozzáadása a books táblához

Ø  Hozz létre egy új migrációt add_isbn_to_books_table névvel

Ø  Az up metódusban adj hozzá egy isbn mezőt, amely string típusú, és lehet nullable.

Nincsenek megjegyzések:

Megjegyzés küldése

Norway_info Laravel REST API Jetstreammel (Livewire + MySQL)

Készítsünk egy olyan Laravel REST API-t, amely egy contents nevű adatbázistábla adatait kezeli (Create, Read, Update, Delete), és amelyet P...