LaravelでDBからマイグレーションファイルを作成する方法

こんにちは、コバヤシです。

今回はLaravel5.5以降でデータベースからマイグレーションファイルを作成する方法について書きます。

DB->マイグレーションファイル

以前はXethron /migrations-generator があって便利に使っていたのですが、これってLaravel5.4まで対応なんですよね。
最近のLaravelで使えずどうしたものかと思ったら、後継が出ていました。

github.com

今回はこれを使っていきたいと思います。

インストール

まずインストールします。

composer require oscarafdev/migrations-generator --dev

あれ、 Allowed memory size of 1610612736 bytes
のエラーが出てインストール出来ませんでした。。

一時的にメモリ制限を解除してインストールします。

COMPOSER_MEMORY_LIMIT=-1 composer require oscarafdev/migrations-generator --dev

今度は問題なくインストールが終わりました。

マイグレーションファイルを作成

インストールが出来たので、DBからマイグレーションを作っていきます。

php artisan migrate:generate

 Do you want to log these migrations in the migrations table? [Y/n] :
 > 

マイグレーションファイルを作って良いか聞かれるのでYを入力します。

 Number is: 1. We recommend using Batch Number 0 so that it becomes the "first" migration [Default: 0]

マイグレーションのバッチ番号を聞かれるので、Laravelでマイグレーションを実行していない場合はそのままリターンでOKです。 実行済みの場合は適切な番号を入力しましょう。

マイグレーションファイルが作成されます。

マイグレーションファイルの確認

マイグレーションファイルを確認してみます。 Laravel標準のセッションテーブルをサンプルに作成してみたので見てみます。

     Schema::create('sessions', function(Blueprint $table)
        {
            $table->string(''id'', 191)->unique();
            $table->bigInteger('user_id')->unsigned()->nullable();
            $table->string(''ip_address'', 45)->nullable();
            $table->text('user_agent')->nullable();
            $table->text('payload');
            $table->integer('last_activity');
        });

・・・。 なんだか微妙ですね。unsignedBigIntegerがあるのにunsigned()を使用していたりします。
いやそれよりも、そのままではエラーになります。「''id''」などシングルクォートが連続で入っています。

手直しするのは、一からマイグレーションファイルを作成するよりは楽なので良いのですが
このあたりは早く直してほしいところですね。

作成するテーブルを指定する

マイグレーションファイルを作成するテーブルを指定するには以下のようにします。

php artisan migrate:generate sessions

作成しないテーブルを指定する

逆にマイグレーションファイルを作成しないテーブルを指定するには以下のようにします。

php artisan migrate:generate --ignore="sessions"

まとめ

バグはありましたが、何とか使える感じでしょうか。 早期に直してもらって、どんどん使っていけたらと思います。