所以,我在我的实体中有一个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"})