サーチ…
移行
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