Database Migration
In deze les leren we hoe we met Laravel een database aanmaken en vullen met testdata.
Artisan
Artisan (ambachtsman) is de command line tool die bij laravel hoort. Je kunt er allemaal handige dingen mee doen. Je kunt zelfs een webserver opstarten (als je geen XAMPP gebruikt).
Let op het uitvoeren van een artisan command doen we vanuit de project directory.
Database Migratie
Met artisan maken we een tabel, eerst voeren we het volgende in de command prompt uit.
php artisan make:migration create_links_table --create=links
Dit commando maakt een file. Deze staat in database/migrations{{datetime}}_create_links_table.php
Open deze file.
tip: ga naar de direcory waar deze file in staan in je command prompt en type notepad gevolgd door de naam van de file.
In het script staan twee functies up() and down(). up() wordt gebruikt om een nieuwe database te maken en down kan worden gebuikt om deze database weer te verwijderen.
Migratie scripts kunnen worden gebruikt om ene bestaande database aan te passen (migrate) of een nieuwe database aan te maken.
Verander de function up()
public function up()
{
Schema::create('links', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('url')->unique();
$table->text('description');
$table->timestamps();
});
}
Om het database script te draaien moet Laravel toegnag hebben tot de database. Edit hiervoor de .env
file in de files directory.
In de .env file staan configuratie parameters zoals de database naam en userid en password van de database.
In de .env.example file staat een complete voorbeeld config waar alle mogelijke configuratie parameters in staan. Voor nu beperken we ons even tot de database connectie.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=links
DB_USERNAME=root
DB_PASSWORD=
Voer de migratie uit:
php artisan migrate
Kijk nu via phpmyadmin welke of de tabel is aangemaakt.
Draai nu de migratie terug met het commando:
php artisan migrate:rollback
Kijk nu weer via phpmyadmin wat er is gebeurt.
Voer tenslotte de migratie nog een keer uit.
Met het commando:
php artisan help migrate
Zie je alle migratie opties. Kijk zelf in de opties hoe je een commando kan nete als of kan uitvoeren waarbij je kan zien wat er precies gebeurt; welke queries of commando's er worden uitgevoerd.
met het commando:
php artisan migrate:refresh
Combineer je een rollback en een migrate.
Opdracht
Kijk met deze net-alsof-optie wat er wordt uitgevoerd bij een migrate en een rollback.
Tabel vullen
Om aan de slag te gaan is het handig als we onze tabel met wat data kunnen vullen. Ook daar zijn handige commando's voor.
php artisan make:model --factory Link
Dit commando maakt een file in de directory databases/factories.
Voer het commando uit en open de file LinkFactory.php in de genoemde directory.
Pas de code in deze file aan op de volgende manier:
$factory->define(Link::class, function (Faker $faker) {
return [
'title' => substr($faker->sentence(2), 0, -1),
'url' => $faker->url,
'description' => $faker->paragraph,
];
});
De $faker->sentence(2) method genereert een random zin van 2 woorden en met de substring functie halen we het laatste karatker weg omdat dat een punt is die we er niet bij willen hebben.
De $faker->url genereert een random url.
En de $faker->paragraph, je raadt het al genereert een stukje tekst, een paragraaf.
Nu moeten we een script maken dat aan de hand van deze omschrijving de tabellen vult, dat doen we met:
php artisan make:seeder LinksTableSeeder
(denk eraan dat je in de juiste directory staat als je ene artisan commando uitvoert)
In de database/seeds directory staat de file LinksTableSeeder.php die we net hebben aangenmaakt. Open deze en verander deze.
public function run()
{
factory(App\Link::class, 5)->create();
}
De 5 geeft aan dat we 5 rijen willen vullen met data.
Open vervolgens de file DatabaseSeeder.php indezelfde directory en plaats de volgende code in deze file:
public function run()
{
$this->call(LinksTableSeeder::class);
}
De code in deze file zorgt ervoor dat de LinksTableSeeder.php wordt uitgevoerd.
We gaan een nieuwe migration uitvoeren en zorgen er voor dat tijdens deze migratie de tabllen gevuld worden met data op de manier zoals we zojuist hebben gedefinieerd.
php artisan migrate:refresh --seed
Controleer met phpmyadmin of de tabel links is gevuld.
Ga door met de volgende les indien er data in de tabel staat.
Samengevat
Er zijn nog wat andere handige commando's die tijdens het ontwikkelen van een applicatie goed van pas kunnen komen, alle handige migratie commando's op een rijtje:
Commando | Beschrijving |
php artisan migrate | voer de migratie uit |
php artisan migrate:rollback | maak de migratie weer ongedaan |
php artisan migrate:refresh | doe een rollback en een migrate |
php artisan migrate:refresh --seed | doe een rollback en een migrate en vul de tabellen met data |
php artisan migrate:fresh | drop alle tabellen en doe opnieuw een migrate |
php artisan help | alle commando's |
php artisan migrate help | help over het commando migrate |
We zijn de volgende files tegengekomen:
files (vanuit project directorie) | Beschrijving |
database/migrations/<create_table>.php | defniëer hoe de tabel moet worden gemaakt |
.env | file met configuratie opties zoals database opties |
database/factories/<table>Factory.php | Definieer hoe tabel te vullen met test data |
database/seeds/<table>TableSeeder.php | Roep functie X ker aan om rijen te genereren |
database/seeds/DatabaseSeeder.php | Vanuit hier dient de TableSeeder te worden aangeroepen |