2016-12-02 81 views
0

在我的管理我有一个一对多定义为它的工作:索纳塔管理 - 无法获取sonata_type_collection与模态

/** 
* @ORM\OneToMany(targetEntity="Module", mappedBy="sequence", cascade={"persist", "remove"}) 
*/ 
private $modules; 

而且相逆的一面:

/** 
* @ORM\ManyToOne(targetEntity="ModuleSequence", inversedBy="modules", cascade={"persist"}, fetch="LAZY") 
* @ORM\JoinColumn(name="sequence_id", referencedColumnName="id") 
*/ 
protected $sequence; 

在我的管理类我定义的'模块'字段:

->add('modules', 'sonata_type_collection',array(
     'by_reference' => false 
)) 

最后在ModuleSequence实体中,这里是addModule方法:

 /** 
    * Add modules 
    * 
    * @param \AppBundle\Entity\Module $module 
    * @return ModuleSequence 
    */ 
    public function addModule(\AppBundle\Entity\Module $module) 
    { 
     $module->setSequence($this); 
     $this->modules[] = $module; 

     return $this; 
    } 

我有“添加”按钮,我得到的模态,我填写并验证。 Ajax请求被发送到分析器,但不会出现新行。

'sequence_id'没有在数据库中设置,我不知道为什么...请任何想法?

当我使用'inline'&'表'选项时,该ID设置良好。

回答

0

有相同的问题,并通过重写prePersist和preUpdate方法解决它,然后坚持关联。

public function prePersist($object) 
{ 
    $this->persistBlocks($object); 

    $content->mergeNewTranslations(); 
} 

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

private function persistModules($object) 
{ 
    $em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager'); 

    foreach($object->getModules() as $module) 
    { 
     $module->setObject($object); // change Object to the name of your Entity!! 
     $em->persist($module); 
    } 
}