Sök…


migreringar

Att kontrollera din databas i Laravel är att använda migreringar. Skapa migration med hantverkare:

php artisan make:migration create_first_table --create=first_table

Detta genererar klassen CreateFirstTable. Inom upp-metoden kan du skapa dina kolumner:

<?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');
    }
} 

I slutet för att köra alla dina migrationsklasser kan du köra hantverkskommandot:

php artisan migrate

Detta skapar dina tabeller och dina kolumner i din databas. Andra användbara migrera-kommandon är:

  • php artisan migrate:rollback - Återuppspelning av den senaste databasmigreringen
  • php artisan migrate:reset - Återuppspelning av alla databasmigreringar
  • php artisan migrate:refresh - Återställ och kör alla migrationer igen
  • php artisan migrate:status - Visa status för varje migration

Ändra befintliga tabeller

Ibland måste du ändra din befintliga tabellstruktur som att renaming/deleting kolumner. Som du kan åstadkomma genom att skapa en ny migrering. Och i up metoden för din migrering.

//Renaming Column.

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('email', 'username');
    });
}

Ovanstående exempel byter namn på email column i users table till username . Medan koden nedan släpper ett kolumn username från users .

IMPROTANT: För att modifiera kolumner måste du lägga till doctrine/dbal i projektets composer.json fil och köra composer update att återspegla förändringar.

//Droping Column
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('username');
    });
}

Migrationsfilerna

Migrationer i en Laravel 5-applikation lever i database/migrations . Deras filnamn överensstämmer med ett visst format:

<year>_<month>_<day>_<hour><minute><second>_<name>.php

En migreringsfil ska representera en schematuppdatering för att lösa ett särskilt problem. Till exempel:

2016_07_21_134310_add_last_logged_in_to_users_table.php

Databasmigreringar hålls i kronologisk ordning så att Laravel vet i vilken ordning att utföra dem. Laravel kommer alltid att utföra migrationer från äldsta till nyaste.

Genererar migreringsfiler

Att skapa en ny migreringsfil med rätt filnamn varje gång du behöver ändra ditt schema skulle vara en chore. Lyckligtvis Laravels artisan kan generera migrationen för dig:

php artisan make:migration add_last_logged_in_to_users_table

Du kan också använda - --table och - --create flaggor med kommandot ovan. Dessa är valfria och bara för enkelhets skull och kommer att infoga den relevanta pannplattkoden i migreringsfilen.

php artisan make:migration add_last_logged_in_to_users_table --table=users

php artisan make:migration create_logs_table --create=logs

Du kan ange en anpassad utgångsväg för den genererade migrationen med alternativet - --path . Vägen är relativt applikationens basväg.

php artisan make:migration --path=app/Modules/User/Migrations

Inuti en databasmigrering

Varje migration bör ha en metod up() och en metod down() . Syftet med metoden up() är att utföra de erforderliga operationerna för att sätta databasschemat i dess nya tillstånd, och syftet med metoden down() är att vända alla operationer som utförs med metoden up() . För att säkerställa att down() -metoden korrekt reverserar dina operationer är det avgörande för att kunna återföra databasschemaändringar.

En exempel migreringsfil kan se ut så här:

<?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');
        });
    }
}

När du kör denna migrering kommer Laravel att generera följande SQL för att köra mot din databas:

ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL

Kör migrationer

När din migrering har skrivits, kommer den att använda operationerna i din databas.

php artisan migrate

Om allt gick bra ser du en utgång som liknar nedan:

Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table

Laravel är smart nog att veta när du driver migrationer i produktionsmiljön. Om det upptäcker att du utför en destruktiv migration (till exempel en som tar bort en kolumn från en tabell) kommer kommandot php artisan migrate att be dig om bekräftelse. I kontinuerliga leveransmiljöer kanske detta inte önskas. I så fall använder du - --force flaggan för att hoppa över bekräftelsen:

php artisan migrate --force

Om du bara har kört migreringar kan du bli förvirrad över att se en migrations i din databas. Denna tabell är vad Laravel använder för att hålla reda på vilka migrationer som redan har körts. Vid utfärdandet av migrate kommandot bestämmer Laravel vilka migreringar som ännu inte har körts, och kör sedan dem i kronologisk ordning och uppdaterar sedan migrations att den passar.

Du bör aldrig redigera migrations manuellt om du inte vet vad du gör. Det är mycket lätt att oavsiktligt lämna din databas i ett trasigt tillstånd där dina migrationer misslyckas.

Rolling Back Migrations

Vad händer om du vill rulla tillbaka den senaste migreringen, dvs. den senaste operationen, kan du använda det fantastiska rollback kommandot. Men kom ihåg att det här kommandot bara rullar tillbaka den senaste migreringen, som kan innehålla flera migreringsfiler

php artisan migrate:rollback

Om du är intresserad av att rulla tillbaka alla dina applikationsmigreringar kan du använda följande kommando

php artisan migrate:reset 

Dessutom om du är lat som jag och vill rulla tillbaka och migrera med ett kommando kan du använda det här kommandot

php artisan migrate:refresh
php artisan migrate:refresh --seed

Du kan också ange antal åtgärder för att rulla tillbaka med step alternativet. Som detta kommer tillbaka 1 steg.

php artisan migrate:rollback --step=1


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow