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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow