Doctrine:在使用两种自定义映射类型

时间:2016-10-07 16:23:55

标签: php mysql symfony doctrine-orm doctrine

我创建了两个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;

每次尝试更新这些表时,都会将它们设置为完全相同的状态。是我的错还是教条的错?

这里有两种类型的代码:MoneyTypeEmailType

GitHub / Doctrine Issue here

1 个答案:

答案 0 :(得分:1)

Doctrine将数据库中的每一列视为字符串,但认为您希望它们是金钱/电子邮件,因此决定每次都需要迁移。

对此进行排序的方法是添加requiresSQLCommentHint,以便在列注释中添加一些文本,以表明它实际上是正确的客户类型。你只需添加..

即可
/**
 * {@inheritdoc}
 */
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
    return true;
}

..到您的自定义类型和Doctrine将处理其余的。