2015-05-01 3 views
1

В моей Gecko.php я иметь следующую часть:Symfony 2 удаление объект с oneToMany отношения

/** 
    * @ORM\OneToMany(targetEntity="Weight", mappedBy="geckoId") 
    */ 
    private $weights; 

и в моем Weight.php у меня есть это:

/** 
* @ORM\ManyToOne(targetEntity="Gecko", inversedBy="weights") 
* @ORM\JoinColumn(name="gecko_id", referencedColumnName="id") 
*/ 
private $geckoId; 

Мой геккон удалить действие следующим образом:

/** 
* Deletes a Gecko entity. 
* 
* @Route("/{name}", name="gecko_delete") 
* @Method("DELETE") 
*/ 
public function deleteAction(Request $request, $name) 
{ 
    $form = $this->createDeleteForm($name); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $entity = $em->getRepository('BreedrGeckoBundle:Gecko')->findOneByName($name); 

     if (!$entity) { 
      throw $this->createNotFoundException('Unable to find Gecko entity.'); 
     } 

     $em->remove($entity); 
     $em->flush(); 
    } 

    return $this->redirect($this->generateUrl('gecko')); 
} 

Когда я нажимаю кнопку удаления в своей форме, я получаю эту ошибку:

An exception occurred while executing 'DELETE FROM Gecko WHERE id = ?' with params [5]:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (breedr . weight , CONSTRAINT FK_615077FC45D556 FOREIGN KEY (gecko_id) REFERENCES Gecko (id))

Я не знаю, как исправить эту проблему. Когда в базе данных нет весов для конкретного геккона, они удаляются штрафом, но если есть какие-то веса, он не будет удалять. В идеале я хотел бы быть в состоянии удалить все данные веса в то же время, что геккон удален

Заранее спасибо

Энди

+0

Не знаете, почему кто-то мог бы это сделать, нет ничего плохого в этом вопросе? –

+0

Есть ли причина использовать * gecko * в названии? Gecko - это Firefox-s engi, возможно, это смущает кого-то. Вы можете улучшить название, заменив * gecko * на * entity *. –

+0

Это справедливая точка, только упомянул об этом, так как это моя ситуация :) –

ответ

1
/** 
* @ORM\OneToMany(targetEntity="Weight", mappedBy="geckoId", cascade={"persist", "remove"}) 
*/ 
private $weights; 

Добавить каскадные операции весов, поэтому всякий раз, когда Gecko будет обновляться или удаляться, связанные с ним веса также будут обновляться/удаляться.

1

Если вы не вручную удалить принадлежащие подразделения родителей объект перед удалением, вы получите такие ошибки. Вы можете перебрать все принадлежащие лицо и удалять их вручную перед удалением родителя, или вы можете установить доктрину автоматически каскадные операции удаления:

Doctrine Cascade Operations

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