環境
PHP7.1
MySQL5.7
Laravel5.6
公式ドキュメント:
https://readouble.com/laravel/5.6/ja/migrations.html
マイグレーションとは
データベースのバージョンコントロールです。
利用するメリットとしては、下記です。
- 複数人で開発する際、コマンドひとつでDBの設定を同じ状態にできます
- 手動でカラム変更等すると残らない設定変更の履歴が、コードで残ります
設定
DB名・ユーザ名・パスワードを設定します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=[dbname]
DB_USERNAME=[username]
DB_PASSWORD=[password]
マイグレーションファイル作成
Artisanコマンドを実行し、マイグレーションファイルを生成します。
# php artisan make:migration create_samples_table
下記のようなファイルが生成されます。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSamplesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('samples', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('samples');
}
}
upメソッド
新しいテーブル、カラム、インデックスをデータベースに追加するために使用します。
できること:
- テーブル/カラムの存在チェック
- テーブル名変更/削除
- カラム作成 / 変更 / 削除
- インデックス設定 / 削除
- カラム修飾子(null指定可・autoIncrement等)
- デフォルト接続以外のデータベース接続を行いスキーマ設定を行うことも可能です
downメソッド
upメソッドが行った操作を元に戻します。
マイグレーションを実行
# php artisan migrate
テーブルが生成・更新されます。
実行したマイグレーションを元に戻したいとき
ロールバック
php artisan migrate:rollback
最後に「一度に」実行したマイグレーションをまとめて元に戻します。
全マイグレーションをリセット
php artisan migrate:reset
実行した全てのマイグレーションを元に戻します。
エラーの確認
# tail -200 storage/logs/laravel.log
エラーが出た場合の詳細ログを確認できます。
環境
MySQL5.6でマイグレーションを実行するとsyntaxエラーがでます。
Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
対処法:
https://qiita.com/beer_geek/items/6e4264db142745ea666f
私は、MySQL5.6→5.7にバージョンアップすることで回避しました。
http://www.softplus.jp/wiki/?%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89%2FCentOS6.x%E3%81%A7MySQL5.6%E2%87%925.7%E3%81%AB%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B