updated_at的自动值,在学说中created_at

2022-08-30 09:17:18

我想使字段和我的 Doctrine 实体自动更新。updated_atcreated_at

在 Ruby on Rails 模型中,有 2 个字段:和 .updated_atcreated_at

可以在这里找到描述: http://guides.rubyonrails.org/migrations.html#migration-overview

时间戳宏添加两列,created_at和updated_at。这些特殊列由 Active Record 自动管理(如果存在)。

我可以在教义 2 中启用类似的功能吗?


答案 1
  1. 您可以调用方法。$this->setCreatedAt(new \DateTime())__construct
  2. 您可以使用生命周期回调
/**
 * @ORM\PrePersist
 * @ORM\PreUpdate
*/
public function updatedTimestamps(): void
{
    $this->setUpdatedAt(new \DateTime('now'));    
    if ($this->getCreatedAt() === null) {
        $this->setCreatedAt(new \DateTime('now'));
    }
}

不要忘记添加到实体类表示法中:@ORM\HasLifecycleCallbacks


答案 2

如果您想单独处理它们,这是另一种选择。

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="person")
 * @ORM\HasLifecycleCallbacks
 */
class Person
{
    ..........

    /**
     * @var datetime $created
     *
     * @ORM\Column(type="datetime")
     */
    protected $created;

    /**
     * @var datetime $updated
     * 
     * @ORM\Column(type="datetime", nullable = true)
     */
    protected $updated;


    /**
     * Gets triggered only on insert

     * @ORM\PrePersist
     */
    public function onPrePersist()
    {
        $this->created = new \DateTime("now");
    }

    /**
     * Gets triggered every time on update

     * @ORM\PreUpdate
     */
    public function onPreUpdate()
    {
        $this->updated = new \DateTime("now");
    }

    ..........
}

推荐