私は 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 許容オプションを追加することです。