php - 学说迁移 : default value for not nullable fk

标签 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 migrates:diff" 时,生成的迁移脚本不包含 language_id 的默认值。因此迁移脚本失败。为对象中的属性设置默认值没有帮助。如何为 fk 列定义默认值?我既没有在 doctrines 文档中找到任何东西,也没有通过 google/stackoverflow 找到任何东西。

最佳答案

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

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

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

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

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

出于这个原因,您可能需要考虑封装实体创建的“服务”,这样您就知道语言将始终有效并默认分配。

关于php - 学说迁移 : default value for not nullable fk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39676188/

相关文章:

php - 如果数据库包含特定 ID,如何停止将表单发布到 mysql?

php - 将目录中的所有文件合并/合并到一个文本文件中

mysql - MySQL Doctrine ,我可以选择父类别和子类别中的所有产品吗?

php - 在 Doctrine2 上设置无限超时

Cakephp 3 - 制作烘焙命令需要存在外键

sql-server - 为什么我新创建的 FK 关系没有出现在对象资源管理器中?

php - 检索数据库值和 php 文本框值

php - 验证验证码功能

php - 错误:方法 Doctrine\ORM\Query\Expr\From::__toString() 不得在 symfony 2 应用程序中抛出异常

mysql - 不能在 mySQL 中删除外键