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