如何在原则2中设置默认值?


当前回答

使用:

options={"default":"foo bar"}

而不是:

options={"default"="foo bar"}

例如:

/**
* @ORM\Column(name="foo", type="smallint", options={"default":0})
*/
private $foo

其他回答

在属性定义上设置默认值时要小心!在构造函数中执行,以避免出现问题。如果您在属性定义上定义它,然后将对象持久化到数据库,然后进行部分加载,那么未加载的属性将再次具有默认值。如果您想再次持久化对象,这是危险的。

虽然在构造函数中设置值可以工作,但使用Doctrine Lifecycle事件可能是更好的解决方案。

通过利用prePersist生命周期事件,您可以仅在初始持久化时为您的实体设置默认值。

工作对我的mysql数据库也:

Entity\Entity_name:
    type: entity
    table: table_name
    fields: 
        field_name:
            type: integer
            nullable: true
            options:
                default: 1

在实体中设置一个构造函数,并在那里设置默认值。

数据库默认值不支持“可移植”。使用数据库默认值的唯一方法是通过columnDefinition映射属性,在该属性中为字段映射到的列指定SQL片段(包括default原因)。

你可以使用:

<?php
/**
 * @Entity
 */
class myEntity {
    /**
     * @var string
     *
     * @Column(name="myColumn", type="string", length="50")
     */
    private $myColumn = 'myDefaultValue';
    ...
}

php级别的默认值是首选的,因为这些值在新创建的和持久化的对象上也是正确可用的(在持久化一个新对象后,Doctrine不会返回数据库以获得默认值)。