Zoeken…
migraties
Het beheren van uw database in Laravel is met behulp van migraties. Creëer migratie met artisan:
php artisan make:migration create_first_table --create=first_table
Dit genereert de klasse CreateFirstTable. In de up-methode kunt u uw kolommen maken:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFirstTable extends Migration
{
public function up()
{
Schema::create('first_table', function (Blueprint $table) {
$table->increments('id');
$table->string('first_string_column_name');
$table->integer('secont_integer_column_name');
$table->timestamps();
});
}
public function down()
{
Schema::drop('first_table');
}
}
Aan het einde om al uw migratieklassen uit te voeren, kunt u het artisanale commando uitvoeren:
php artisan migrate
Hiermee worden uw tabellen en kolommen in uw database gemaakt. Andere nuttige migratieopdracht zijn:
-
php artisan migrate:rollback
- De laatste database migratie terugdraaien -
php artisan migrate:reset
- Alle database-migraties terugdraaien -
php artisan migrate:refresh
- Reset en voer alle migraties opnieuw uit -
php artisan migrate:status
- Toon de status van elke migratie
Bestaande tabellen wijzigen
Soms moet u uw bestaande tabelstructuur wijzigen, zoals het renaming/deleting
kolommen. Dat kunt u bereiken door een nieuwe migratie te maken. En in de up
methode van uw migratie.
//Renaming Column.
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('email', 'username');
});
}
Bovenstaand voorbeeld zal de email column
van de users table
hernoemen naar username
. Terwijl de onderstaande code een username
uit de tabel met users
.
BELANGRIJK: voor het wijzigen van kolommen moet u doctrine/dbal
afhankelijkheid toevoegen aan het bestand composer.json
van het project en de composer update
van de composer.json
uitvoeren om de wijzigingen weer te geven.
//Droping Column
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('username');
});
}
De migratiebestanden
Migraties in een Laravel 5-applicatie live in de database/migrations
. Hun bestandsnamen voldoen aan een bepaald formaat:
<year>_<month>_<day>_<hour><minute><second>_<name>.php
Eén migratiebestand moet een schema-update zijn om een bepaald probleem op te lossen. Bijvoorbeeld:
2016_07_21_134310_add_last_logged_in_to_users_table.php
Databasemigraties worden in chronologische volgorde bewaard, zodat Laravel weet in welke volgorde ze moeten worden uitgevoerd. Laravel zal altijd migraties uitvoeren van de oudste naar de nieuwste.
Migratiebestanden genereren
Het maken van een nieuw migratiebestand met de juiste bestandsnaam telkens als u uw schema moet wijzigen, zou een hele klus zijn. Gelukkig kan het artisan
commando van Laravel de migratie voor u genereren:
php artisan make:migration add_last_logged_in_to_users_table
U kunt ook de vlaggen --table
en --create
met de bovenstaande opdracht. Deze zijn optioneel en alleen voor het gemak, en zullen de relevante boilerplate-code in het migratiebestand invoegen.
php artisan make:migration add_last_logged_in_to_users_table --table=users
php artisan make:migration create_logs_table --create=logs
U kunt een aangepast uitvoerpad opgeven voor de gegenereerde migratie met de optie --path
. Het pad is relatief ten opzichte van het basispad van de toepassing.
php artisan make:migration --path=app/Modules/User/Migrations
Binnen een database migratie
Elke migratie moet een methode up()
en een methode down()
. Het doel van de methode up()
is om de vereiste bewerkingen uit te voeren om het databaseschema in de nieuwe status te plaatsen, en het doel van de methode down()
is om alle bewerkingen die door de methode up()
worden uitgevoerd om te keren. Ervoor zorgen dat de methode down()
uw activiteiten correct omkeert, is van cruciaal belang om wijzigingen in het databaseschema ongedaan te maken.
Een voorbeeld van een migratiebestand kan er zo uitzien:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddLastLoggedInToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dateTime('last_logged_in')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('last_logged_in');
});
}
}
Wanneer deze migratie wordt uitgevoerd, genereert Laravel de volgende SQL voor uw database:
ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL
Lopende migraties
Nadat uw migratie is geschreven, worden de bewerkingen op uw database uitgevoerd wanneer u deze uitvoert.
php artisan migrate
Als alles goed is gegaan, ziet u een uitvoer vergelijkbaar met de onderstaande:
Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table
Laravel is slim genoeg om te weten wanneer u migraties uitvoert in de productieomgeving. Als het detecteert dat je een destructieve migratie uitvoert (bijvoorbeeld een die een kolom uit een tabel verwijdert), zal het php artisan migrate
commando je om bevestiging vragen. In omgevingen met continue levering is dit misschien niet gewenst. Gebruik in dat geval de vlag --force
om de bevestiging over te slaan:
php artisan migrate --force
Als u alleen migraties hebt uitgevoerd, kunt u in de war raken om de aanwezigheid van een migrations
in uw database te zien. Deze tabel gebruikt Laravel om bij te houden welke migraties al zijn uitgevoerd. Bij het uitvoeren van het migrate
zal Laravel bepalen welke migraties nog moeten worden uitgevoerd, en deze vervolgens in chronologische volgorde uitvoeren en vervolgens de migrations
aanpassen.
U moet de migrations
nooit handmatig bewerken, tenzij u absoluut weet wat u doet. Het is heel gemakkelijk om per ongeluk uw database in een gebroken staat achter te laten waarin uw migraties mislukken.
Migraties terugdraaien
Wat als u de nieuwste migratie, dwz recente bewerking, wilt terugdraaien, kunt u de geweldige opdracht rollback
gebruiken. Maar onthoud dat dit commando alleen de laatste migratie terugdraait, die meerdere migratiebestanden kan bevatten
php artisan migrate:rollback
Als u geïnteresseerd bent in het terugdraaien van al uw applicatiemigraties, kunt u de volgende opdracht gebruiken
php artisan migrate:reset
Bovendien, als je lui bent zoals ik en wilt terugdraaien en migreren met één opdracht, kun je deze opdracht gebruiken
php artisan migrate:refresh
php artisan migrate:refresh --seed
U kunt ook het aantal stappen terugdraaien opgeven met step
-optie. Zo wordt 1 stap teruggedraaid.
php artisan migrate:rollback --step=1