Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony MANYTONE删除关系而不更新子实体_Php_Doctrine_Symfony 2.7 - Fatal编程技术网

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