program tip

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

radiobox 2020. 11. 4. 07:51
반응형

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


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

이것이 필요한 이유 : 일종의 임시 데이터베이스 스키마를 구현하고 있으며 행을 업데이트하는 대신 다른 하나를 생성하면됩니다.


복제를 시도하고 엔터티에 다음 방법을 추가하십시오.

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에 새 행으로 저장되었습니다.

__clone()순수한 모델 뷰에서 의미가 있으므로 메서드를 통해 ID 속성을 여전히 null 로 설정합니다.

업데이트 2

Doctrine 코드를 파헤쳐 보면 생성 된 프록시 클래스 __clone()가이 중요한 라인으로 구현되기 때문입니다.

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

다음은 과도한 복잡성을 포함하지 않는 간단한 전략입니다.

$new->fromArray( $old->toArray() );
$new->id = NULL;

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

반응형