将默认值设置为具有ORM注释和处理查询的字段

Ben*_*der 12 doctrine symfony

我试图避免手动为字段输入01,$locked所以我在注释中将默认值指定为0@ORM但是它没有按预期工作,所以我在下面收到错误.我虽然options={"default"=0}会处理它,但看起来它没有处理它!

是否有一种通过默认值分配0的方法,以便INSERT语句不会失败?

注意:我可以用prePersist()方法__construct()或其他方法对其进行排序,$locked = 0;但我感兴趣的是@ORM注释解决方案.

如果@ORM注释没有处理它有什么意义,options={"default"=0}因为它标记数据库中的字段默认值?见下图.

在此输入图像描述

错误:

DBALException: An exception occurred while executing "INSERT INTO user (username, locked) VALUES (?, ?)" with params ["username", null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column "locked" cannot be null
Run Code Online (Sandbox Code Playgroud)

用户实体:

/**
 * @var boolean
 * @ORM\column(type="boolean", options={"default"=0})
 */
protected $locked;
Run Code Online (Sandbox Code Playgroud)

控制器:

$user: new USer();
$user->setUsername('username');
$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

dmn*_*ptr 24

这就是你所需要的:

/**
 * @var boolean
 * @ORM\column(type="boolean")
 */
protected $locked = 0;
Run Code Online (Sandbox Code Playgroud)

要么:

/**
 * @var boolean
 * @ORM\column(type="boolean")
 */
protected $locked = false;
Run Code Online (Sandbox Code Playgroud)

UPDATE

Doctrine不支持通过SQL中的"DEFAULT"关键字在列中设置默认值.

http://docs.doctrine-project.org/en/latest/reference/faq.html#how-can-i-add-default-values-to-a-column

  • 试试`@ORM\column(type ="boolean",options = {"default"= false})`.那会这样吗? (2认同)
  • 答案中的引用现在可能已经过时了.[dmnptr评论](http://stackoverflow.com/questions/26239221/setting-default-value-to-a-field-with-orm-annotations-and-handling-queries#comment41157759_26239381)现在应该可以使用了.请参阅[注释参考](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#column). (2认同)