サーチ…


移行

Laravelでデータベースを制御するには、移行を使用します。職人との移行を作成する:

php artisan make:migration create_first_table --create=first_table

これにより、CreateFirstTableクラスが生成されます。上のメソッドの中で、列を作成することができます:

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

すべての移行クラスを終了するには、artisanコマンドを実行します。

php artisan migrate

これにより、データベースにテーブルとカラムが作成されます。その他の便利な移行コマンドは次のとおりです。

  • php artisan migrate:rollback - 最後のデータベース移行をロールバックする
  • php artisan migrate:reset - すべてのデータベース移行をロールバックする
  • php artisan migrate:refresh - すべての移行をリセットして再実行する
  • php artisan migrate:status - 各移行のステータスを表示する

既存のテーブルの変更

列のrenaming/deletingなど、既存のテーブル構造を変更する必要が生じることがあります。あなたは新しいmigration.Andを作成して達成できます。そして、あなたの移行のupメソッドで。

//Renaming Column.

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

上記の例では、 users table email columnの名前をusername変更しusername 。以下のコードでは、 usersテーブルから列のusernameを削除していusername

重要:列を変更するには、プロジェクトのcomposer.jsonファイルにdoctrine/dbal依存関係を追加し、変更を反映composer updateためにcomposer updateを実行する必要があります。

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

移行ファイル

Laravel 5アプリケーションのdatabase/migrationsは、 database/migrationsディレクトリにあります。ファイル名は特定の形式に従います。

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

1つの移行ファイルは、特定の問題を解決するためのスキーマ更新を表す必要があります。例えば:

2016_07_21_134310_add_last_logged_in_to_users_table.php

データベースの移行は、Laravelがどの順序で実行するかを知るために、時間順に保持されます。 Laravelは常に古いものから新しいものへの移行を実行します。

移行ファイルの生成

正しいファイル名で新しい移行ファイルを作成すると、スキーマを変更する必要があるたびに手間がかかります。ありがたいことに、Laravelのartisanコマンドはあなたのために移行を生成することができます:

php artisan make:migration add_last_logged_in_to_users_table

また、上記のコマンドで--table--createフラグを使用することもできます。これらはオプションであり、便宜上のものであり、関連するボイラープレートコードを移行ファイルに挿入します。

php artisan make:migration add_last_logged_in_to_users_table --table=users

php artisan make:migration create_logs_table --create=logs

--pathオプションを使用して、生成されたマイグレーションのカスタム出力パスを指定することができます。パスは、アプリケーションのベースパスからの相対パスです。

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

データベース移行内

各移行には、 up()メソッドとdown()メソッドが必要です。 up()メソッドの目的は、データベース・スキーマを新しい状態にするために必要な操作を実行することです。また、 down()メソッドの目的は、 up()メソッドによって実行される操作を取り消すことです。データベーススキーマの変更をロールバックするには、 down()メソッドが操作を正しく逆転させることが重要です。

移行ファイルの例は、次のようになります。

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

この移行を実行すると、Laravelはデータベースに対して実行する次のSQLを生成します。

ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL

移行の実行

マイグレーションが作成されると、マイグレーションが実行され、データベースに操作が適用されます。

php artisan migrate

すべてうまくいけば、次のような出力が表示されます。

Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table

Laravelは、プロダクション環境での移行をいつ実行するかを知る上で賢明です。破壊的な移行を行っていることが検出された場合(たとえば、テーブルから列を削除する場合など)、 php artisan migrateコマンドは確認を求めます。継続的な配送環境では、これは望ましくないかもしれません。その場合は、 - --forceフラグを使用して確認をスキップします。

php artisan migrate --force

マイグレーションを実行しているだけの場合は、データベース内にmigrationsテーブルが存在するかどうかがわかりにくい場合があります。この表は、Laravelがどのマイグレーションがすでに実行されたかを追跡するために使用するものです。 migrateコマンドを発行migrate 、Laravelはまだ実行されていない移行を判断し、それを時系列に実行して、 migrationsテーブルを更新します。

自分が行っていることを完全に理解していない限り、手動でmigrationsテーブルを編集するべきではありません。誤ってデータベースを壊れた状態にしておくと、移行が失敗することがあります。

移行のロールバック

最新の移行、つまり最近の操作をrollbackする場合は、すばらしいrollbackコマンドを使用できます。しかし、このコマンドは最後の移行だけをロールバックします。これには複数の移行ファイルが含まれる場合があります

php artisan migrate:rollback

すべてのアプリケーションの移行をロールバックしたい場合は、次のコマンドを使用します

php artisan migrate:reset 

さらに、私のように怠惰で、1つのコマンドでロールバックして移行したい場合は、このコマンドを使用できます

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

stepオプションでロールバックするstep数を指定することもできます。このように1ステップをロールバックします。

php artisan migrate:rollback --step=1


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow