У меня есть объект Serveur
, у которого есть отношение ManyToOne с Responsable
class Serveur implements NotifyPropertyChanged
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \MyBundle\Entity\Responsable
*
* @ORM\ManyToOne(targetEntity="\MyBundle\Entity\Responsable", inversedBy="serveurs", cascade={"persist"})
* @ORM\JoinColumn(name="serveur_responsable", referencedColumnName="id", nullable=true)
*
*/
private $responsable;
class Responsable
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Uid", type="string", unique=true, nullable=false)
*/
private $uid;
Когда вы вводите новый ответственный, в моем updateAction (serveur) я вызываю службу, которая проверяет, есть ли уже ответственный с этим uid, и если нет, я возвращаю новый ответственный:
public function updateAction(Request $request, $id)
{
$entity = $em->getRepository('MyBundle:Serveur')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Serveur entity.');
}
$editForm = $this->createEditForm($entity);
$editForm->handleRequest($request);
if ($editForm->isValid()) {
$resp = $editForm['responsable']->getData();
if($resp->getUid()){
$entity_resp = $this->container->get('app.responsable')->getResp($resp->getUid());
$entity->setResponsable($entity_resp);
}
else{
$entity->setResponsable(null);
}
Теперь, когда я редактирую server, если нет ответственного и я ввожу его, он работает независимо от того, существует ответственный или нет.
Но если я редактирую server, у которого уже есть ответственный, и я хочу установить для Responsable значение null, это не работает:
Произошло исключение при выполнении 'ОТВЕТСТВЕННОЕ ОБНОВЛЕНИЕ SET Uid = ? ГДЕ идентификатор = ?' с параметрами [null, 192]: SQLSTATE [23000]: нарушение ограничения целостности: 1062 Дублирующаяся запись '' для ключа 'UNIQ_52520D076BD640E6'
На самом деле он пытается ОБНОВИТЬ uid ответственного до нуля, но это не то, чего я хочу, я хотел бы сохранить ответственного в БД и просто удалить отношение.
Я что-то упускаю ?
Спасибо !