かなり複雑なデータベース (150 以上のテーブル) を持つプロジェクトに取り組んでいます。変更を維持できるようにするために、できれば Yii または Laravel を使用して、移行を追加することにしました。
既存のデータベースから初期移行を生成できるかどうか、誰にもわかりませんか?
手動で作成すると、次のようになります。
- 永遠にとって
- 非常にエラーが発生しやすくなります。
方法がない場合、そのような機能をサポートする優れた PHP ベースのフレームワークを知っている人はいますか?
Yii でこれを達成するための手順:
データベース接続設定を に追加しますprotected/config/console.php
。
実行yiic migrate create initial
して、移行用のスタブ コードを作成します。
この要点の内容を にコピーしprotected/commands/InitialDbMigrationCommand.php
ます。
実行して、最初のデータベース移行のメソッドyiic initialdbmigration 'name_of_your_database' > initial_migration.php
を生成up()
します。down()
手順 2 でフォルダに作成したファイルにup()
メソッドdown()
をコピーして貼り付けます。initial_migration.php
protected/migrations
「Doctrine Project」(別名 Doctrine) には、既存の DB 構造の DB 移行を作成する機能があるため、既存の構造を再作成できます。Symfony、Laravel、Yii、および多くのフレームワークで簡単に実装できます。
サンプル:
http://symfony.com/legacy/doc/doctrine/1_2/en/07-Migrations
データベースから
既存のデータベースがある場合は、次のコマンドを実行して、データベースを再作成する一連の移行クラスを構築できます。
$ ./symfony doctrine:generate-migrations-db
モデルから
モデルの既存のセットがある場合は、次のコマンドを実行して、データベースを作成する一連の移行クラスを構築できます。
$ ./symfony doctrine:generate-migrations-models
これは、まさにそれを行う、私が作成した Laravel パッケージです。既存のデータベースからクリーンで正確な Laravel 移行を自動的に生成します。
データベースを想定していないため、元のインデックスと外部キー名を保持しながら、任意のデータベース構造で動作するはずです。
答えはhttps://github.com/jamband/yii2-schemadump for Yii2 「既存のデータベースからスキーマを生成するこのコマンド」だと思います。
Yii 1.x に関しては、schmunkがすばらしいdatabase-command
yiic コマンドを作成しました。
このコマンドは、移行のみをカバーします。独自のダウン マイグレーションを作成する必要があります。
使用するには:
GitHub から最新バージョンを取得し、その内容をフォルダに入れ/protected/commands
ます (存在しない場合は作成します)。コンテンツをそのまま(この特定のコマンドのサブフォルダーなしで)配置する必要があることに注意してください。これは、たとえば拡張機能に対して行っていることとは逆です。
コマンドを使用する場合は、EDatabaseCommand.php
ファイル(および内部のクラス)の名前を に変更します(ドキュメントで提案されているように)。この修正がなければ、ドキュメントとコードの間にわずかな不一致があるため、コマンドを使用する必要があります(少なくとも最新バージョンでは、これを書いている時点で、おそらくschmunkがこれを修正する予定です)。DatabaseCommand.php
yiic database
yiic edatabase
protected
これで、コンソールのフォルダーに戻り、実行しyiic database dump migration_name --prefix=table_name
ます。
protected/runtime/migration_name.php
これにより、ファイル名の先頭に適切な日付と時刻が含まれる移行ファイルが作成されCDbMigration
、データベース スキーマを再作成するための一連のコマンドが入力されます。コマンドのカスタマイズの詳細については、ドキュメントの「使用方法」セクションにアクセスしてください。
移行とは、データベース構造を設定して変更することであるため、現在のデータベースを反映することはできません。
そして、これはあなたがしなければならないステップでもありません。現在いるところから開始できるため、この時点までロールバックできます。つまり、現在のテーブルの構造全体を指定することなく、変更のみを指定して移行を行うことができます。
user というテーブルがあり、それにファーストネームを追加したいとします。
php artisan migrate:make add_firstname_to_user
次にapplication/migrations
、移行ファイルに移動して見つけ、これを追加します
public function up()
{
Schema::table('user', function($table)
{
$table->string('firstname');
});
}
public function down() {
Schema::table('user', function($table)
{
$table->drop_column('firstname');
});
}
これで、移行を追加できます
php artisan migrate:install // if you haven't run this, should only be once
php artisan migrate
.. を使用してロールバック
php artisan migrate:rollback
これにより、他の方法でテーブルに影響を与えることなく、列 firstname が追加または削除されます。
私はYiiとLaravelの両方を使用していますが、どちらにも必要なものが見つかりませんでした。どちらも空のファイルを作成するため、移行スクリプトを自分で作成する必要があります。150テーブルのテーブルの場合、移行を自分で作成するのは困難ですが、想像するほど難しくはありません。フィールドに関する情報はすでにあるので、作成するのにそれほど時間はかからないはずです。
Yii 用に 1 つ用意されています。
これにより、分散チームはデータベースをローカルで簡単に更新し、バージョン管理システム (私は git を使用) を介して残りのコードと共にその更新を他の開発者に自動的に配布できます。また、xml および移行ファイルへの完全な初期 db ダンプも実行します。
プロジェクトのホーム: https://code.google.com/p/yii-automatically-generated-migration-files/
ソースコード: https://code.google.com/p/yii-automatically-generated-migration-files/source/checkout
チームに配布するために手動でこれを行わなければならないという事実に悩まされていたので、ゼロから作成しました。
それが役に立てば幸い!
バグ、改善、コメントを自由に共有してください。
いくつかの調査を行った後、Laravel に必要なものは次のとおりです: https://github.com/XCMer/larry-four-generator
(少なくともバージョン 4、これがどれくらい機能するかは誰にもわかりません。Laravel の変更が速すぎて、重大な変更が多すぎます)
実行するphp artisan larry:fromdb
と、テーブルが表示されます...特定のテーブルを除外または処理することもできます (readme を参照)。
繰り返しますが、MySQL Workbench などでスキーマを構築したい場合は、非常に便利です。ワークベンチファイルを解析するパッケージについての言及も見ました...しかし、リンクは無効でした。
このラリー パッケージをhttps://github.com/JeffreyWay/Laravel-4-Generatorsで使用することもできます。
次に、CakePHP スタイルのスキャフォールディングを作成できます。
または、このパッケージを試してください: https://github.com/barryvdh/laravel-migration-generator