有人能告诉我如何在datetime列上添加默认值吗?我不能这样做:学说2.1 - 日期时间列的默认值
protected $registration_date = date("Y-m-d H:i:s", time());
那么如何?
有人能告诉我如何在datetime列上添加默认值吗?我不能这样做:学说2.1 - 日期时间列的默认值
protected $registration_date = date("Y-m-d H:i:s", time());
那么如何?
你映射你的财产作为DateTime类型然后设置使用新DateTime实例构造函数中的值:
/**
* @Entity
* @Table(name="...")
*/
class MyEntity
{
/** @Column(type="datetime") */
protected $registration_date;
public function __construct()
{
$this->registration_date = new DateTime();
}
}
这可以作为一个持久化类的构造函数时水化不叫。
您还可以使用生命周期回调,如果你想成为非常精确:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\HasLifecycleCallbacks
* ...
*/
class MyEntity
{
/**
* @ORM\PrePersist
*/
public function onPrePersistSetRegistrationDate()
{
$this->registration_date = new \DateTime();
}
}
我更喜欢这个答案,因为它更清楚地说明了Doctrine将如何处理它。 –
+1它会将最新日期记录在记录中。如果记录有两个日期modified_datetime和created_datetime。如果将modified_datetime放入构造函数中,created_time可能会比modified_datetime更新。 –
有关生命周期回调的所有功能的参考:http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#reference-events-lifecycle-events – fyrye
有这个这个自动化的延伸......
https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/timestampable.md
/**
* @var \DateTime
*
* @ORM\Column(name="date_added", type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $date_added;
/**
* @var \DateTime
*
* @ORM\Column(name="date_modified", type="datetime")
* @Gedmo\Timestampable(on="update")
*/
private $date_modified;
对于默认价值CURRENT_TIMESTAMP:
@ORM\Column(name="created_at", type="datetime", options={"default": 0})
为我工作...
这应该是现在最好的答案IMO,尤其是如果你想让表模式本身承担CURRENT_TIMESTAMP – skrilled
谢谢。这帮了我很多。我已经使用了'options = {“default”:“CURRENT_TIMESTAMP”})'之前一般工作。但是在我的postgres后面,它变成了DEFAULT NOW(),这是postgres的方式。但是然后一个教条:migrations:diff会误解now()作为与CURRENT_TIMESTAMP的偏差,并在每次运行它时创建一个diff文件。但是通过这个解决方案原则得到了一切都是同步的。 – luba
伟大的答案和IMO,这是最干净的方式。如果它有任何兴趣,这被翻译为'ADD date_added TIMESTAMP(0)WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL' for me。 – crmpicco
我认为,实现自动填充为datetime
最好的办法就是让这样的:
* @ORM\Column(type="datetime", options={"default"="CURRENT_TIMESTAMP"})
把逻辑构造是不正确的解决方案,因为默认设置值为SQL客户端责任。如果您决定不再使用ORM,您将失去业务逻辑。另外,如果使用构造函数,您将无法将默认时间戳添加到属性现有行。
我投这个答案,因为它是纯PHP解决方案。其他答案可能:1)需要特殊的知识'onPrePersistSetRegistrationDate',它添加'HasLifecycleCallbacks','PrePersist'注解2)我想设置一个默认值需要我添加第三个库'@Gedmo \ Timestampable'?!! 3)CURRENT_TIMESTAMP有时不好。例如:当你在中国的脚本服务器,但在美国的数据库服务器。 (原因,这不是很常见,但也有这种情况) – Yarco