Php Symfony MANYTONE删除关系而不更新子实体
我有一个实体Php Symfony MANYTONE删除关系而不更新子实体,php,doctrine,symfony-2.7,Php,Doctrine,Symfony 2.7,我有一个实体Serveur,它与responsible class Serveur implements NotifyPropertyChanged { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /*
Serveur
,它与responsible
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;
当您在my updateAction(serveur)中输入一个新的Responsible时,我调用一个服务,查看是否已经有一个带有此uid的Responsible,如果没有,我将返回一个新的Responsible:
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);
}
现在,当我编辑一个服务器时,如果没有责任,我输入一个,无论责任是否存在,它都会工作
但是如果我编辑一个已经有responsable的serveur,并且我想将responsable设置为null,那么它就不起作用了:
执行“UPDATE responsable SET Uid=”时发生异常?其中id=?'带参数[null,192]:SQLSTATE[23000]:完整性约束冲突:键“UNIQ_52520D076BD640E6”的1062重复项“”
它实际上试图将responsable的uid更新为null,但这不是我想要的,我想将responsable保留在DB中,然后删除关系
我错过什么了吗
谢谢 我使用了DataTransformer:
class RespTransformer implements DataTransformerInterface{
private $om;
public function __construct(ObjectManager $om)
{
$this->om = $om;
}
public function transform($resp)
{
if(null === $resp){
return '';
}
return $resp->getUid();
}
public function reverseTransform($uid)
{
if(!$uid){
return;
}
$resp = $this->om
->getRepository('MyBundle:Responsable')
->findOneByUid($uid);
if(null === $resp){
$resp = new Responsable();
$resp->setUid($uid);
}
return $resp;
}
class RespTransformer implements DataTransformerInterface{
private $om;
public function __construct(ObjectManager $om)
{
$this->om = $om;
}
public function transform($resp)
{
if(null === $resp){
return '';
}
return $resp->getUid();
}
public function reverseTransform($uid)
{
if(!$uid){
return;
}
$resp = $this->om
->getRepository('MyBundle:Responsable')
->findOneByUid($uid);
if(null === $resp){
$resp = new Responsable();
$resp->setUid($uid);
}
return $resp;
}