# Migrations

<main class="content-wrap card" id="bkmrk-migrations-migration">### Inleiding

Migrations zijn als versiebeheer voor je database.

Je beschrijft met scripts hoe je database eruit moet komen te zien. Als je dan later je database verandert dan kun je met dezelfde scripts de bestaande databases aanpassen (=migreren). Dat maakt het makkelijk als je code en database aan wilt passen in de productieomgeving. In plaats van in phpmyadmin tabel voor tabel aant e passen draai je gewoon een script.

Migrations heb je ook in Yii, die hebben we alleen niet behandeld.

### Database config

Laten we eerst een database maken. We maken via [localhost/phpmyadmin](http://localhost/phpmyadmin/) een nieuwe database aan en noemen dat *webshop*.

In de root in ons Laravel project openen we dan de `.env` file en we zorgen ervoor dat er in de file het volgende komt te staan.

```
...
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=webshop
DB_USERNAME=root
DB_PASSWORD=
...
```

### Migrations

In de terminal in Visual Studio Code voer je het volgende commando uit:

```
php artisan make:migration create_product_table --create=product
```

Dit commando maakt een file. Deze staat in `database/migrations/` en heet

`{{datetime}}_create_product_table.php`

Open dit bestand en plaats de volgende code:

```PHP
public function up()
{
	Schema::create('product', function (Blueprint $table) {
		$table->increments('id');
		$table->string('name');
		$table->text('description'); 
        $table->decimal('amount', 8, 2);
		$table->timestamps();
	});
}
```

In dit script wordt in 'Laravel-taal' beschreven hoe de tabel *product* moet worden gemaakt.

In de terminal kan je nu met het volgende commande de tabel maken.

```
php artisan migrate
```

Ga naar [localhost/phpmyadmin](http://localhost/phpmyadmin/) en controleer of de tabel aangemaakt is.

[![image-1666300242232.png](https://www.roc.ovh/uploads/images/gallery/2022-10/scaled-1680-/image-1666300242232.png)](https://www.roc.ovh/uploads/images/gallery/2022-10/image-1666300242232.png)

Naast de tabel product worden er nog meer tabellen aangemaakt. Dit zijn tabellen die Laravel standaard aanmaakt.

Als je nog een keer `php artisan migrate` uitvoert dan gebeurt er niets meer. Dat komt omdat de migratie al is uitgevoerd. Laravel houd bij (in de database tabel *migations*) welke migraties zijn uitgevoerd.

Wil je een migratie toch nog een keer willen uitvoeren dan kan dat met het commando.

```
php artisan migrate:refresh
```

### Inleveren

1. Een schermafdruk van je browser met phpmayadmin waarin te zien is dat de tabel is aangemaakt (zoals in het voorbeeld).
2. Het bestand `2022_10_20_200701_create_product_table.php` (in database/migrations).

\--

</main>