많은 스크린 샷을 소유 할 수있는 소프트웨어가 있습니다. Doctrine2 : 업데이트시 다 대일 관계 삭제
이
소프트웨어 클래스입니다 :class Software
{
public function __construct()
{
$this->screenshots = new ArrayCollection();
}
/**
* @ORM\OneToMany(targetEntity="Screenshot", mappedBy="software", cascade={"persist"})
* @ORM\OrderBy({"sequence" = "ASC", "id" = "ASC"})
*/
private $screenshots;
public function setScreenshots($screenshots)
{
$this->screenshots = $screenshots;
}
}
그리고이 스크린 샷 클래스입니다 : 나는 몇 가지 새로운 스크린 샷을 생성 할 때
class Screenshot
{
/**
* @ORM\ManyToOne(targetEntity="Software", inversedBy="screenshots")
* @ORM\JoinColumn(name="software_id", referencedColumnName="id")
*/
private $software;
/**
* @param mixed $software
*/
public function setSoftware($software)
{
$this->software = $software;
}
, 그들은 배열 수집에 넣고 함께 $software->setScreenshots($newScreenshots)
전화 새로운 스크린 샷은 모든 것이 잘 작동합니다. 새 스크린 샷은 저장되고 소프트웨어에 대한 참조가 있습니다.
그러나 다른 스크린 샷을 생성하고 다시 메서드를 호출하면 이전 스크린 샷이 삭제되지 않습니다. 새로운 스크린 샷이 추가되었습니다.
일종의 계단식 옵션을 사용하여 이전 스크린 샷이 삭제되는 방법이 있습니까? 또는 적어도 소프트웨어에 대한 참조를 제거 하시겠습니까?
foreach ($software->getScreenshots() as $scrshot){
$em->remove($scrshot);
}
$software->setScreenshots($newScreenshots);
하지만,이 외에도 솔루션에서 당신은 반대 측 또는 관계에 orphanRemoval
을 정의하는 시도가 :
내가 수동 제거에 대해 생각하지만 편안하지 않습니다 내 실체에서이 논리를 가지고 있습니다. orphanRemoval은 소프트웨어 측에서만 허용되며 필요에 따라 작동하지 않습니다. – Anton
예, 컨트롤러/서비스에 추가 할 수 있도록 제거 로직이있는 엔티티 병합도 피할 수 있습니다. –
jsons를 비정규 화하는 객체 작성기를 사용하고 있습니다. 그래서 슬프게도 엔티티 외에 어딘가에 로직을 넣을 수 없을 것입니다. – Anton