itsource

원칙 2에서 엔티티를 다른 행으로 다시 저장하는 방법

mycopycode 2022. 9. 12. 11:50
반응형

원칙 2에서 엔티티를 다른 행으로 다시 저장하는 방법

엔티티가 있다고 칩시다.$e. 동일한 엔티티 데이터이지만 다른 기본 키를 갖는 다른 행으로 저장할 수 있는 일반적인 방법이 있습니까?

이것이 필요한 이유:Temporal Database 스키마를 구현하고 있는데 행을 업데이트하는 대신 다른 스키마를 작성해야 합니다.

복제를 시도하고 엔티티에 다음 메서드를 추가하십시오.

public function __clone() {
    $this->id = null;
}

엔티티를 지속하기 전에 엔티티를 분리해야 할 수 있습니다.지금은 이걸 테스트할 개발 기계가 없어요

$f = clone $e;
$em->detach($f);
$em->persist($f);
$em->flush();

갱신하다

간단한 SQLite 데모를 사용해 봤습니다.당신은 아무것도 할 필요가 없어요.다음 항목은 추가 없이 작동했습니다.__clone()방법, 또는 평범하지 않은 것을 하는 것

$new = clone $old;
$em->persist($new);
$em->flush();

일단 플래시를 하면$new엔티티가 새 ID를 가지며 DB에 새 행으로 저장되었습니다.

그래도 ID 속성을 무효로 할 수 있습니다.__clone()순수한 모델 뷰에서 이치에 맞는 방법.

업데이트 2

이는 생성된 프록시 클래스가 구현되기 때문입니다.__clone()이 중요한 대사를 가지고

unset($this->_entityPersister, $this->_identifier);

나는 그저 할 뿐이다:

/**
 * __clone
 *
 * @return void
 */
public function __clone()
{
    $this->id = null;
}

상세한 것에 대하여는, https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/cookbook/implementing-wakeup-or-clone.html 를 참조해 주세요.

동일한 클래스의 새 개체에 데이터를 복사하고 유지하면 됩니다.심플하게!

언급URL : https://stackoverflow.com/questions/9071094/how-to-re-save-the-entity-as-another-row-in-doctrine-2

반응형