Symfony2,设置datetime字段的默认值



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

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

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

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

/**
 * @var DateTime
 *
 * @ORMColumn(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 DoctrineORMMapping as ORM;
/**
 * Example
 *
 * @ORMTable(name="examples")
 * @ORMEntity
 * @ORMHasLifecycleCallbacks
 */
class Example
{
    // ...
    /**
     * @var DateTime
     *
     * @ORMColumn(name="create_at", type="datetime", nullable=false)
     */
    private $createdAt;
    /**
     * @var DateTime
     *
     * @ORMColumn(name="updated_at", type="datetime", nullable=false)
     */
    private $updatedAt;
    // ...
    /**
     * Set createdAt
     *
     * @param DateTime $createdAt
     * @ORMPrePersist
     * @return Example
     */
    public function setCreatedAt()
    {
        if(!$this->createdAt){
            $this->createdAt = new DateTime();
        }
        return $this;
    }
    // ...
    /**
     * Set updatedAt
     *
     * @param DateTime $updatedAt
     * @ORMPrePersist
     * @return Example
     */
    public function setUpdatedAt()
    {
        $this->updatedAt = new DateTime();
        return $this;
    }
    // ...
}

注意@ORMHasLifecycleCallbacks和@ORMPrePersist注释。细节: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添加到现有行。

@ORMColumn(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>

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

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

相关内容

  • 没有找到相关文章