2016-07-13 7 views
2

내 개체 User은 OneToOne 관계를 통해 다른 개체와 관련이 있으며 모든 개체에 대해 "삭제"를 계단식으로 사용합니다. 나는 User을 제거 할 때, 엔티티가 실제로 데이터베이스에서 제거되지 않습니다 내가 SoftDeleteable 행동 확장을 사용하고Symfony : SoftDeleteable 비헤이비어 확장 기능을 사용할 때 캐스 캐 이드 삭제를하는 방법은 무엇입니까?

, 상기 deletedAt 필드는 단순히 그렇게 날짜 시간 (현재)로 설정하고, 모든 deletedAt 필드는 관련된 entites의. 나는이 작업을 수행 할 때

$em->getFilters()->disable('soft-deleteable'); 
$user->setDeletedAt(null); 

내 문제는 모든 관련 기관이 삭제를 유지한다 : 나는 사용자를 복원 할 때 문서에 제안

지금, 내가 할. setDeleted (null)를 모두 자동으로 캐스케이드 할 수있는 방법에 대한 아이디어가 있습니까?

+0

그냥 : deletedAt를 null로 설정 한 후 플러시합니까? – dlondero

답변

2

내가 협회로 작업 할 때 그들 중 상당수가 비슷한 문제에 관련된 볼 수 GH 저장소에 열려 문제를보고이 확장되지만를 사용하지 마십시오 :

먼저 관련 엔터티마다 필터를 명시 적으로 사용하지 않도록 설정하려고합니다.

$filter = $em->getFilters()->enable('soft-deleteable'); 
$filter->disableForEntity('Entity\Article'); 
$filter->disableForEntity('Entity\SomeOtherEntity'); 

그렇지 않으면 리스너를 추가하고 Doctrine 이벤트 중 하나에 바인딩하여 soft-deleteable 외부로 캐스 캐 이드합니다.

+0

답변 해 주셔서 감사합니다. 나는 아주 쉽게 보이지 않더라도 당신이 제안한대로 청취자를 추가하려고 노력할 것입니다. – Roubi

+0

당신이 생각하는 것보다 쉽습니다! docs http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html을 참조하십시오. – dlondero

+0

예, 이벤트를 바인딩하는 것은 쉽지 않습니다. 알아낼 수없는 것은 모든 "계단식"엔티티를 얻는 방법입니다. $ object-> getCascadedRelations()와 같은 것. 정보는 매핑에서 확실히 발견 될 수 있지만 추출 방법을 알지 못합니다. – Roubi