当未选择选择值(或选择为空)时,自动删除BD中的实体

时间:2015-06-16 12:53:24

标签: php forms symfony doctrine

我想知道symfony / doctrine是否可以自动管理这样一个事实,即不是将我的实体的值设置为null,而是可以将其删除。 (通过删除它我的意思是值等于null的记录)

为例: 我有一个与VOTE实体相关联的PICTURE实体。每个人都可以(通过表格)投票赞成或反对图片(+1或-1)。实体VOTE属性值设置为+1或-1。但是选民也可以将他们的投票改为neigher赞成或反对......但在这种情况下,Symfony / doctrine不会删除实体,而是将VOTE value_attribut设置为null。 (虽然我希望将其删除)。

是否可以自动执行此操作。到目前为止,我必须在我的控制器中执行以下操作:

if($form->isValid()) 
{
  if($vote->getValue() == null)
  {
    $picture = $vote->getPicture();
    $picture->removeVote($vote);
    $em->remove($vote);
  }
}

1 个答案:

答案 0 :(得分:0)

您可以使用教义实体监听器:

https://symfony.com/doc/current/bundles/DoctrineBundle/entity-listeners.html

http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#entity-listeners

并且有类似的东西:

public function postUpdateHandler(Vote $vote, LifecycleEventArgs $event)
{
    if (null === $vote->getValue()) {
        // Following two lines could be avoided with a onDelete: "SET NULL" in Picture orm mapping 
        $picture = $vote->getPicture();
        $picture->removeVote($vote);
        $this->em->remove($vote);
        $this->em->flush();
    }
}

您可能需要注入容器以避免循环引用异常