2015-06-16 3 views
2

Я хотел бы знать, может ли symfony/doctrine автоматически управлять тем фактом, что вместо того, чтобы установить значение моего объекта в null, он мог бы устранить его. (путем его удаления я имею в виду записи, где значение равно null)Удалить автоматически объект в BD, когда выбранное значение не выбрано (или выбрано нуль)

пример: У меня есть объект ИЗОБРАЖЕНИЕ, связанный с объектом VOTE. Каждый может голосовать (через форму) за или против картины (+1 или -1). Значение атрибута VOTE объекта устанавливается равным +1 или -1. но избиратели также могут изменить свой голос до более низкого уровня за или против ..., но в этом случае Symfony/doctrine не удаляет объект, а скорее устанавливает значение VOTE value_attribut равным null. (хотя я бы хотел, чтобы он был удален).

это можно сделать автоматически. До сих пор я должен сделать следующее в моем контроллере:

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

ответ

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(); 
    } 
} 

You mi ght нужно впрыснуть контейнер, чтобы избежать циклического исключения ссылки

+0

Я не понимаю «следуя линиям». Вы имеете в виду следующие строки или следующие две строки? –

+0

Извините, забыли w. Я имею в виду следующие две строки. – gvf

Смежные вопросы