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