Symfony5x Doctrine에서 creadat/updatedAt 자동 설정

기본적으로 Doctine2의 작은 소재 (데이터베이스에서 실체 & 실체를 만드는 계승편)에 기재된 내용과 같지만 이 보도의 공개일은 2014.11.20으로 Symfony5도 이렇게 움직인다.확인된 Symfony 버전은 v5입니다.1.5.
/**
 * @ORM\Entity(repositoryClass=FooRepository::class)
 * @ORM\HasLifecycleCallbacks
 */
class Foo
{
우선 클라스의 선언 부분에 추가@ORM\HasLifecycleCallbacks 선도한다.
다음은 방법으로 다음과 같은 내용을 추가한다.
/**
 * @ORM\PrePersist
 */
public function setCreatedAtValue()
{
    $this->createdAt = new \DateTimeImmutable();
    $this->updatedAt = new \DateTimeImmutable();
}

/**
 * @ORM\PreUpdate
 */
public function setUpdatedAtValue()
{
    $this->updatedAt = new \DateTimeImmutable();
}
setCreatedAtValue()에서 업데이트updatedAt는 명명적으로 불편하면 다른 방법으로 준비할 수도 있다setUpdatedAtValue().
간단한 동작 설명.@ORM\HasLifecycleCallbacks 요청이 있으면 Doctine은 Enity에 lifecycle call back이 있음을 인식합니다.이것@ORM\PrePersist@ORM\PreUpdate이 없으면 불러낼 수 없으니 주의하세요.@ORM\PrePersistpersonist를 실행하기 전(INSERT 이전)에 호출되었기 때문에 현재 날짜와 시간을 입력하십시오 createdAt.updatedAt가 업데이트되기 전(UPDATE 이전)에 호출되었으므로 여기@ORM\PreUpdate에 현재 날짜를 입력하십시오.
이전에 Symfony의 문서Timestampable는 하나의 버튼이었기 때문에 Symfony5의 Timestampable는 순조롭게 작동하지 못하고 매우 복잡하기 때문에 Doctine의 생명주기를 아예 사용하는 것이 가장 좋다.

2021/08/14 추기


Symfony v5.3.6곳make:entity에서 type의 기본값updatedAt이므로 상기 예를 datetime_immutable에서 \DateTime로 수정합니다.

좋은 웹페이지 즐겨찾기