doctrine migration:不可为空的fk的默认值

时间:2016-09-24 12:11:44

标签: php doctrine-orm foreign-keys migration default

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

/**
 * @ORM\ManyToOne(targetEntity="Language")
 * @ORM\JoinColumn(name="language_id", referencedColumnName="id", nullable=false)
 */
protected $language;

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

2 个答案:

答案 0 :(得分:1)

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

如果您需要定义默认的语言关联,那么您在创建实体时明确需要设置它。

$language = $entityManager->find(1);

$entity = new Entity;
$entity->setLanguage($language);

$entityManager->persist($entity);
$entityManager->flush();

出于这个原因,您可能需要考虑一项服务'它封装了您的实体的创建,因此您知道一种语言将始终有效并默认分配。

答案 1 :(得分:1)

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

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

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