5

実行php app/console doctrine:migrations:diffすると、必要に応じて新しい移行クラスが生成され、現在のデータベース スキーマがエンティティへの変更によって指定されたスキーマに変換されます。

この例は、fos_userテーブルを作成するために生成されたクラスを示しています。

class Version20120712145445 extends AbstractMigration
{
    public function up(Schema $schema)
    {
        $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql");        
        $this->addSql("CREATE TABLE fos_user (id INT AUTO_INCREMENT NOT NULL, ...);
    }

    public function down(Schema $schema)
    {
        $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql");        
        $this->addSql("DROP TABLE fos_user");
    }
}

ご覧のとおり、生成された移行は特定のデータベース サーバー (このインスタンスでは MySQL) に関連付けられています。

テストの実行時間を短縮する (予想される) パフォーマンス上の利点があるため、テスト環境でインメモリ sqlite データベースを使用したいと考えています。

上記で生成された SQL を取得して同等のものに変換することもできますが、$table = $schema->createTable(); $table->addColumn();これには時間がかかり、人間による SQL からコードへの変換が不十分であるため、エラーが発生する可能性があります。

doctrine:migrations:diff コマンドは、上記のプラットフォーム固有の SQL の代わりに、プラットフォームに依存しない移行コードを作成できますか?

4

2 に答える 2

3

いいえ、それは現在のバージョンでは不可能です。データベースにとらわれない移行が必要な場合は、LiquiBase for migration を参照してください。LiquiBase 用の Symfony2 Bundle もありますLiquibaseBundle

于 2012-08-15T08:22:51.907 に答える
2

現在、他のデータベース移行ツールはサポートされていませんが、いくつかのデータベース管理ツールをサポートする予定です

ドクトリンを参照してください: DBAL-602このチケットは、ドクトリン移行のための LiquiBase、DBDeploy、phinx サポートの機能要求です。

于 2014-02-17T10:35:49.333 に答える