Doctrine - 向实体(如 NOW() )添加默认时间戳

遵循原则准则,我了解如何为实体设置默认值,但是如果我想要日期/时间戳,该怎么办?

我的问题是我的数据库在字段上的默认值为NOW(),但是当我使用 Doctrine 插入记录时,值为 null 或空白,但插入的其余部分发生了。

此外,由于 Doctrine 说要将默认值声明为 const,这也会产生一个问题。

建议?


答案 1

好的,我找到了解决方案:

这个选项就是我正在做的事情。prePersist

确保在注释中定义

<?php

/** @Entity 
 *  @HasLifecycleCallbacks 
 */
class User

这是他们提供的功能示例

/** 
 *  @PrePersist 
 */
public function doStuffOnPrePersist()
{
    $this->createdAt = date('Y-m-d H:i:s');
}

如果你像我一样使用ORM

<?php

/** @ORM\Entity 
 *  @ORM\HasLifecycleCallbacks 
 */
class User

这是他们提供的功能示例

/** 
 *  @ORM\PrePersist 
 */
public function doStuffOnPrePersist()
{
    $this->createdAt = date('Y-m-d H:i:s');
}

答案 2

根据我的经验,最好将所有内容放在实体中,而不是试图强制数据库绕过ORM。

<?php
namespace Phill\PaffordBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
 * Stack
 * @ORM\Table()
 */
class Stack
{
  /**
   * @var integer
   * @ORM\Column(type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;

  /**
   * @var \DateTime
   * @ORM\Column(type="datetime")
   */
  private $startDate;

  public function __construct()
  {
    $this->startDate = new \DateTime();
  }

}

推荐