所以,我在我的实体中有一个类似的DateTime字段:
/**
* @var \DateTime
*
* @ORM\Column(name="timestamp", type="datetime")
*/
private $timestamp;
每次我在数据库中插入内容时,都会这样做:$myEntity->setTimestamp(new \DateTime('now'));
所以,我想在我的实体中的字段上设置默认值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...
如何为此字段设置默认值?每次我使用我的实体时,我都不想设置时间戳...谢谢!
答案 0 :(得分:8)
你是在构造函数中完成的。
public function __construct(){
$this->timestamp(new \DateTime());
}
答案 1 :(得分:5)
LifecycleCallbacks方式:
<?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
答案 2 :(得分:1)
在表单构建器中将其设置为:
$builder->add('timestamp', 'date', array(
'data' => new \DateTime('now')
));
或在您的实体构造函数
中答案 3 :(得分:1)
您可以通过向定义添加选项来实现,我认为这是一个更好的可读性解决方案。此外,在使用构造函数时,您应该通过额外调用将默认值添加到现有行。
@ORM\Column(name="creation_date", type="datetime", options={"default"="CURRENT_TIMESTAMP"})
答案 4 :(得分:0)
该属性只能是常数值。
如果您不希望每次都$myEntity->setTimestamp(new \DateTime('now'));
,那么您可以使用 doctrine lifecycle callbacks 来处理它。
答案 5 :(得分:0)
如果要为$ timestamp设置默认值,请在实体中创建_contruct,这样每次声明此实体的对象时,都会自动设置$ timestamp的值。
如果您不想这样做,那么您必须在控制器中设置值,然后在数据库中保留值。 Symfony2期望DB表的每个字段都有一个值。
答案 6 :(得分:0)
我正在使用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"})