我创建了两个custom mapping types:一个用于Money value object,另一个用于Email value object
现在,每次我运行app/console doctrine:schema:validate
Doctrine告诉我数据库不同步。
每次都希望sql
转储app/console doctrine:schema:update --dump-sql
,以同样的方式更新相同的字段:
ALTER TABLE invoices CHANGE total total VARCHAR(255) NOT NULL;
ALTER TABLE subscriptions CHANGE next_payment_amount next_payment_amount VARCHAR(255) NOT NULL;
ALTER TABLE stripe_charges CHANGE amount amount VARCHAR(200) NOT NULL, CHANGE receipt_email receipt_email VARCHAR(255) DEFAULT NULL;
ALTER TABLE stripe_customers CHANGE email email VARCHAR(255) DEFAULT NULL;
每次尝试更新这些表时,都会将它们设置为完全相同的状态。是我的错还是教条的错?
这里有两种类型的代码:MoneyType
和EmailType
。
GitHub / Doctrine Issue here。
答案 0 :(得分:1)
Doctrine将数据库中的每一列视为字符串,但认为您希望它们是金钱/电子邮件,因此决定每次都需要迁移。
对此进行排序的方法是添加requiresSQLCommentHint
,以便在列注释中添加一些文本,以表明它实际上是正确的客户类型。你只需添加..
/**
* {@inheritdoc}
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
return true;
}
..到您的自定义类型和Doctrine将处理其余的。