0

私は Doctrine Migrations にかなり慣れていないので、これが本当に明らかである場合は申し訳ありません。

より多くの情報を提供するために更新されました

以下のような Symfony2 エンティティ マッピングがあります。

/**
 * @ORM\Column(type="string")
 */
private $name;

これは移行に追加され、すべてが正常に機能するように展開されました。その後、null 値を受け入れるように列を更新する必要があったため、次のように変更されました。

/**
 * @ORM\Column(type="string", nullable=true)
 */
private $name;

問題は、これが結果の移行ファイルに影響を与えないことです。

$ php app/console cache:clear
$ php app/console doctrine:migrations:diff
$ tail -50 app/DoctrineMigrations/Version20131028205742.php

<?php

namespace Application\Migrations;

use Doctrine\DBAL\Migrations\AbstractMigration;
use Doctrine\DBAL\Schema\Schema;

/**
 * Auto-generated Migration: Please modify to your needs!
 */
class Version20131028205742 extends AbstractMigration
{
    public function up(Schema $schema)
    {
        // this up() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql", "Migration can only be executed safely on 'mysql'.");

    }

    public function down(Schema $schema)
    {
        // this down() migration is auto-generated, please modify it to your needs
        $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql", "Migration can only be executed safely on 'mysql'.");

    }
}

null 値を処理するための ALTER ステートメントは追加されていません。データベースを削除して再構築することもできますが、この特定の移行は既に展開されているため、運用データベースで問題が発生します。このような状況は今後も発生する可能性があるため、もう少し理解したいと思います。

これは Doctrine や Symfony2 Doctrine Migrations バンドルの制限ですか? カスタム移行を書かずにこれを回避する方法はありますか?

他のすべての移行は正常に機能していることに注意してください。唯一の問題は、既存のフィールドに null 許容オプションを追加することです。

4

1 に答える 1