Symfony2,设置datetime字段的默认值


Symfony2, set default value of datetime field

所以,我在我的实体中有一个DateTime字段,像这样:

/**
     * @var 'DateTime
     *
     * @ORM'Column(name="timestamp", type="datetime")
     */
    private $timestamp;

每次我插入一些东西在我的数据库,我这样做:$myEntity->setTimestamp(new 'DateTime('now'));

所以,我想在我的实体中设置我的字段的默认值,但是当我尝试:

/**
 * @var 'DateTime
 *
 * @ORM'Column(name="timestamp", type="datetime")
 */
private $timestamp = new 'DateTime('now');

和更新我的基础与doctrine:schema:update后,我有这个错误:PHP Parse error: syntax error, unexpected 'new' (T_NEW) in...

如何设置该字段的默认值?我不想每次使用实体时都使用setTimestamp…谢谢!

在构造函数中完成。

public function __construct(){
    $this->timestamp(new 'DateTime());
}

lifecycle ecallbacks way:

<?php
use Doctrine'ORM'Mapping as ORM;
/**
 * Example
 *
 * @ORM'Table(name="examples")
 * @ORM'Entity
 * @ORM'HasLifecycleCallbacks
 */
class Example
{
    // ...
    /**
     * @var 'DateTime
     *
     * @ORM'Column(name="create_at", type="datetime", nullable=false)
     */
    private $createdAt;
    /**
     * @var 'DateTime
     *
     * @ORM'Column(name="updated_at", type="datetime", nullable=false)
     */
    private $updatedAt;
    // ...
    /**
     * Set createdAt
     *
     * @param 'DateTime $createdAt
     * @ORM'PrePersist
     * @return Example
     */
    public function setCreatedAt()
    {
        if(!$this->createdAt){
            $this->createdAt = new 'DateTime();
        }
        return $this;
    }
    // ...
    /**
     * Set updatedAt
     *
     * @param 'DateTime $updatedAt
     * @ORM'PrePersist
     * @return Example
     */
    public function setUpdatedAt()
    {
        $this->updatedAt = new 'DateTime();
        return $this;
    }
    // ...
}

注意@ORM'HasLifecycleCallbacks和@ORM'PrePersist注释。细节:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html lifecycle-callbacks

在表单生成器中这样设置:

$builder->add('timestamp', 'date', array(
    'data' => new 'DateTime('now')
));

或在你的实体构造函数

您可以通过在定义中添加选项来实现,我认为这是可读性更好的解决方案。此外,在使用构造函数时,应该通过额外调用将default添加到现有行。

@ORM'Column(name="creation_date", type="datetime", options={"default"="CURRENT_TIMESTAMP"})

该属性只能为常量。

如果你不想每次都做$myEntity->setTimestamp(new 'DateTime('now'));,那么你可以使用原则生命周期回调来处理它。

如果你想为$timestamp设置一个默认值,在你的实体中创建一个_construct,这样每次你为这个实体声明对象时,$timestamp的值就会自动设置。

如果你不想这样做,那么你必须在你的控制器中设置这个值,然后在DB中保存这个值。Symfony2期望DB表的每个字段都有一个值。

我正在使用Symfony3,我正在更新orm.xml文件中的字段和选项。

<field name="updated_from" type="datetime" nullable="true" >
    <options>
        <option name="default">CURRENT_TIMESTAMP</option>
    </options>
</field>

**顺便说一句,我试着把这个注释也添加到实体中,但它对我不起作用!例如

@ORM'Column(name="updated", type="datetime", options={"default":"CURRENT_TIMESTAMP"})