16

かなり複雑なデータベース (150 以上のテーブル) を持つプロジェクトに取り組んでいます。変更を維持できるようにするために、できれば Yii または Laravel を使用して、移行を追加することにしました。

既存のデータベースから初期移行を生成できるかどうか、誰にもわかりませんか?

手動で作成すると、次のようになります。

  • 永遠にとって
  • 非常にエラーが発生しやすくなります。

方法がない場合、そのような機能をサポートする優れた PHP ベースのフレームワークを知っている人はいますか?

4

9 に答える 9

25

Yii でこれを達成するための手順:

  1. データベース接続設定を に追加しますprotected/config/console.php

  2. 実行yiic migrate create initialして、移行用のスタブ コードを作成します。

  3. この要点の内容を にコピーしprotected/commands/InitialDbMigrationCommand.phpます。

  4. 実行して、最初のデータベース移行のメソッドyiic initialdbmigration 'name_of_your_database' > initial_migration.phpを生成up()します。down()

  5. 手順 2 でフォルダに作成したファイルにup()メソッドdown()をコピーして貼り付けます。initial_migration.phpprotected/migrations

于 2013-05-08T18:27:23.883 に答える
4

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
于 2013-05-31T10:35:29.790 に答える
2

これは、まさにそれを行う、私が作成した Laravel パッケージです。既存のデータベースからクリーンで正確な Laravel 移行を自動的に生成します。

データベースを想定していないため、元のインデックスと外部キー名を保持しながら、任意のデータベース構造で動作するはずです。

https://github.com/Xethron/migrations-generator

于 2014-03-28T11:34:17.847 に答える
1

答えはhttps://github.com/jamband/yii2-schemadump for Yii2 「既存のデータベースからスキーマを生成するこのコマンド」だと思います。

于 2015-10-12T19:10:24.950 に答える
1

Yii 1.x に関しては、schmunkがすばらしいdatabase-commandyiic コマンドを作成しました。

このコマンドは、移行のみをカバーします。独自のダウン マイグレーションを作成する必要があります

使用するには:

  1. GitHub から最新バージョンを取得し、その内容をフォルダに入れ/protected/commandsます (存在しない場合は作成します)。コンテンツをそのまま(この特定のコマンドのサブフォルダーなしで)配置する必要があることに注意してください。これは、たとえば拡張機能に対して行っていることとは逆です。

  2. コマンドを使用する場合は、EDatabaseCommand.phpファイル(および内部のクラス)の名前を に変更します(ドキュメントで提案されているように)。この修正がなければ、ドキュメントとコードの間にわずかな不一致があるため、コマンドを使用する必要があります(少なくとも最新バージョンでは、これを書いている時点で、おそらくschmunkがこれを修正する予定です)。DatabaseCommand.phpyiic databaseyiic edatabase

  3. protectedこれで、コンソールのフォルダーに戻り、実行しyiic database dump migration_name --prefix=table_nameます。

protected/runtime/migration_name.phpこれにより、ファイル名の先頭に適切な日付と時刻が含まれる移行ファイルが作成されCDbMigration、データベース スキーマを再作成するための一連のコマンドが入力されます。コマンドのカスタマイズの詳細については、ドキュメントの「使用方法」セクションにアクセスしてください。

于 2015-01-16T15:56:14.297 に答える
1

移行とは、データベース構造を設定して変更することであるため、現在のデータベースを反映することはできません。

そして、これはあなたがしなければならないステップでもありません。現在いるところから開始できるため、この時点までロールバックできます。つまり、現在のテーブルの構造全体を指定することなく、変更のみを指定して移行を行うことができます。

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 が追加または削除されます。

于 2012-11-29T11:31:47.577 に答える
0

私はYiiとLaravelの両方を使用していますが、どちらにも必要なものが見つかりませんでした。どちらも空のファイルを作成するため、移行スクリプトを自分で作成する必要があります。150テーブルのテーブルの場合、移行を自分で作成するのは困難ですが、想像するほど難しくはありません。フィールドに関する情報はすでにあるので、作成するのにそれほど時間はかからないはずです。

于 2012-12-10T01:48:22.477 に答える
0

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

チームに配布するために手動でこれを行わなければならないという事実に悩まされていたので、ゼロから作成しました。

それが役に立てば幸い!

バグ、改善、コメントを自由に共有してください。

于 2014-09-02T11:36:09.290 に答える
0

いくつかの調査を行った後、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

于 2014-03-14T20:11:44.460 に答える