Laravelで既存のDBからmigrationsファイルを作成する「migrations-generator」

  • 26
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

経緯

  • 運用中のサービスをDBはそのままでAPI用のPHPフレームワークをLaravelに差し替える事になった。
  • テーブルの数が100を超えていてとても手書きでmigrationを書く気が無い
  • 色々なmigrationsに関する記事を確認しても新規サービスを想定している
  • 困った。(^_^;)

Laravel用パッケージ「migrations-generator」

  • migrations-generator
  • Laravel5、Laravel4に対応。(4の方は自分は未確認)
  • 既存のテーブルのマイグレーションファイルを作成してくれる。
  • 使い方簡単

環境とか

確認した自分の環境
* Mac OSX Yosemite
* vagrant CentOS 7.2
* DB pgsql 9.3
* Laravel 5.2

使い方

githubのreadmeの通り。一応ここでも手順を書く。

インストール

composer require --dev --no-update "xethron/migrations-generator:dev-l5"
composer require --dev --no-update "way/generators:dev-feature/laravel-five-stable"
composer config repositories.repo-name git "git@github.com:jamisonvalenta/Laravel-4-Generators.git"
composer update

composer updateの実行時に何やらTokenを入力しろ的な感じになった。
ctl+cで処理を停止。

githubの認証登録

調べてみるとgithubの認証が無い模様。
composerでGitHub apiのアクセス制限対処法を参考に以下を実行

curl -u '[user name]' -d '{"scopes":["repo"],"note":"Help example"}' https://api.github.com/authorizations

[user name]は自分のgithubのユーザ名を入れる。続けてパスワードを入力する。
認証に成功するとtokenを含むjsonが返ってくる

コンポーザーにgithubのトークンを登録する為に以下を実行

composer config -g github-oauth.github.com [get token]

[get token]はjsonの中身のtokenを入れる。

改めてインストール

composer update

を実行。今度はインストールされる。

Laravelの設定

app.phpのproviders配列に以下を追加

config/app.php
Way\Generators\GeneratorsServiceProvider::class,
Xethron\MigrationsGenerator\MigrationsGeneratorServiceProvider::class,

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

用意が出来たのでマイグレーションファイルの作成をする。ここではDBの接続の設定が完了しているものとします。

単純に全てのテーブルのマイグレーションファイルを作成

php artisan migrate:generate

無視するテーブルを指定してマイグレーションファイルを作成

自分はuserspassword_resetsテーブルをマイグレーションから作成してしまった。この2つを無視する場合は以下をignoreオプションを付けて実行

php artisan migrate:generate --ignore="users, password_resets"
 Do you want to log these migrations in the migrations table? [Y/n] :
 > Y

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

処理を待つとマイグレーションファイルの出来上がりです。

補足

「connection」オプションもある模様。自分は試して無いです。

以上です。なにか間違いや意見などあればコメントか編集リクエストお願いします。