SonataUser Bundle中的一对多

时间:2014-06-06 07:56:13

标签: sonata-admin

是否有一种不那么黑客的方式?

我需要清除/设置一些一对多关系,不删除孤儿,默认行为不会删除既不添加相关实体,提交后所有保持不变。

/.../ UserBundle /管理员/ OrganizacionAdmin.php ....

public function prePersist($organizacion)
{
    $this->preUpdate($organizacion,true);
}


public function preUpdate($organizacion,$agregar=false)
{
    $organizacion->setDependencias($organizacion->getDependencias());
    foreach($organizacion->getDependencias() as $dependencia){
        $dependencia->setOrganizacion($organizacion);
    }
    if($agregar===false){
        $repositorio=$this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository('GoproUserBundle:Dependencia');
        $dependenciasRepositorio=$repositorio->findBy(['organizacion'=>$organizacion->getId()]);

        foreach($dependenciasRepositorio as $dr):
            if(!$organizacion->getDependencias()->contains($dr)){
                $dr->setOrganizacion(null);
            }
        endforeach;

    }

}

/.../ UserBundle /管理/ OrganizacionAdmin.php

/**
 * @ORM\OneToMany(targetEntity="Dependencia", mappedBy="organizacion", cascade={"persist"})
 */
protected $dependencias;

public function setDependencias($dependencias)
{
    if (count($dependencias) > 0) {
        foreach ($dependencias as $dependencia) {
            $this->addDependencia($dependencia);
        }
    }
    return $this;
}

/.../ UserBundle /管理/ DependenciaAdmin.php

/**
 * @ORM\ManyToOne(targetEntity="Organizacion", inversedBy="dependencias")
 */
protected $organizacion;

1 个答案:

答案 0 :(得分:0)

您应该添加以下方法

public function setDependencias($dependencias)
{
    if (count($dependencias) > 0) {
        foreach ($dependencias as $i) {
            $this->addDependencia($i);
        }
    }

    return $this;
}

public function addDependencia($dependencia)
{
    $dependencia->setOrganizacion($this);
    $this->dependencias->add($dependencia);
}

public function removeDependencia($dependencia)
{
    $this->dependencias->removeElement($dependencia);
}

...并在管理类......

public function prePersist($organizacion)
{
    $this->preUpdate($organizacion);
}

public function preUpdate($organizacion)
{
    $organizacion->setDependencias($organizacion->getDependencias());
}

...如One to Many relations and add/edit form in SonataAdmin and Symfony2Sonata Admin Bundle One-to-Many relationship not saving foreign ID

所示

这里的问题(我今天在One to Many relations and add/edit form in SonataAdmin and Symfony2上提出的问题)是,通过这种实施,您无法清除关系(任何线索?)。

希望这会有所帮助......