2014-07-12 2 views
1

이것은 정말 단순한 것이어야하지만, 나는 그것을 이해할 수 없다. 심포니 폼 일대일 관계 DELETE

가 나는 아이 일대일 단방향 관계와 부모 엔티티를 가지고, 소유 측 인 부모 엔티티 :

/** 
* @ORM\OneToOne(targetEntity="Child", cascade={"persist", "remove"}, orphanRemoval=true) 
* @ORM\JoinColumn(name="child_id", referencedColumnName="id")} 
*/ 
protected $Child; 

는 ChildType는이 양식은 ChildType 그것이 필요하지 않고 추가했지만, 일부 필수 필드 :

    012하십시오 에서

    $builder->add('child', new ChildType(), [ 
        'required' => false, 
    ]); 
    

    는 문제가 없는지 조치를 생성

  • 모든 하위 필드가 비어 있으면 연결이 null로 유지되고 일부 관계 필드가 있어도 하위 관계에 대한 유효성 검사 제약 조건이 무시되고 자식 관계가 작성되지 않습니다.

  • 자식 필드 중 일부가 채워지면 연결이 만들어지고 유효성 검사가 통과되면 Child 엔터티가 유지됩니다. 지금까지 예상 워킹으로

는 ..

데이터 세트 업데이트, 모든 것이 잘 만들 때와 똑같은 길을 간다. 완벽

이제 하위 엔티티를 제거하려는 상황이 있습니다. 하위가 필요하지 않으므로 모든 하위 필드를 지우는 것만 큼 간단해야합니다. 그러나 모든 필드를 emty하는 것은 여전히 ​​유효성 검사를 트리거하고 doctrine은 모든 NULL 필드와의 관계를 업데이트합니다.

내가 뭘하려 :

모든 필드가 null의 경우 교리가 관계를 삭제하기위한 preUpdate 리스너를 만들었습니다. 문제는 유효성 검사를 비활성화하지 않고도이 문제를 해결할 수 없다는 것입니다. 그래서 이것은 올바른 방법이 될 수 없습니다. 한 가지 방법은 모든 필드가 null이면 true를 반환하는 콜백 제약 조건을 사용하는 것이지만 모든 일대일의 경우에는 모든 속성 제약 조건을 쓸모 없게 만듭니다. 사실 질수 것은 ..

지금까지 지금, 어느 문서에서 아무것도, X 일대의 대량 사용 사례 ...

그것이 가능하지 무슨 단서는 어떻게 든 다른 유효성 검사 그룹을 사용하지합니다 또는 유효성 검사 안함 symfony 폼 내에서 PostSubmit 또는 모든 필드가 하위 엔티티에서 NULL 인 경우 유효성 검사를 사용하지 않는 다른 방법? 당신이 할 수있는

답변

0

한 가지 형태의 리스너를 사용하고, 뭔가 같은 :

$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { 
    $entity = $event->getForm()->getData(); 
    if (null === $entity->getChild->getField1() && null === $entity->getChild->getField2() ... and so on for each child field) { 
     $entity->setChild(null); 
    } 
});