반응형
교리 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
반응형
'program tip' 카테고리의 다른 글
어설 션을 완전히 비활성화하는 방법 (0) | 2020.11.04 |
---|---|
Magento 결제 흐름 (0) | 2020.11.04 |
NGINX gzip이 JavaScript 파일을 압축하지 않음 (0) | 2020.11.04 |
PHP-변수가 정의되지 않았는지 확인 (0) | 2020.11.04 |
가상 방법이란 무엇입니까? (0) | 2020.11.04 |