原则迁移:不可为空fk的默认值



我在数据库中有一个现有实体。我想给这个实体添加一个新列:

/**
 * @ORMManyToOne(targetEntity="Language")
 * @ORMJoinColumn(name="language_id", referencedColumnName="id", nullable=false)
 */
protected $language;

当我现在使用"vendor/bin/doctrine-migrate migrations:diff"时,生成的迁移脚本不包含language_id的默认值。因此,迁移脚本失败。在对象中为属性设置默认值没有帮助。如何定义k列的默认值?我既没有在学说文档中找到,也没有通过google/stackoverflow。

如果列不为空,那么它应该代表一个有效的关系;假设您使用0代替,Doctrine将尝试使用它来加载关联,这当然会失败。在这些情况下,您需要更新数据库和映射以允许空值。

如果你需要定义一个默认的语言关联,那么你需要在创建实体时显式地设置它。

$language = $entityManager->find(1);
$entity = new Entity;
$entity->setLanguage($language);
$entityManager->persist($entity);
$entityManager->flush();

出于这个原因,你可能想要考虑一个"服务"来封装你的实体的创建,这样你就知道一种语言总是有效的并且默认分配

这可能不是一种干净的方法,但是也许您可以自己执行SQL查询并手动添加DEFAULT语句?

ALTER TABLE registered_user ADD language_id VARCHAR(255) NOT NULL DEFAULT {default_value} WITH VALUES;

我很惊讶在注释中添加默认属性在这里不起作用!

最新更新