是否有一种不那么黑客的方式?
我需要清除/设置一些一对多关系,不删除孤儿,默认行为不会删除既不添加相关实体,提交后所有保持不变。
/.../ 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;
答案 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 Symfony2和Sonata Admin Bundle One-to-Many relationship not saving foreign ID
所示这里的问题(我今天在One to Many relations and add/edit form in SonataAdmin and Symfony2上提出的问题)是,通过这种实施,您无法清除关系(任何线索?)。
希望这会有所帮助......