2016-12-02 5 views
0

В моем администраторе У меня есть OneToMany определила как это:Sonata Admin - Невозможно получить 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 Entity здесь метод 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' & 'table', идентификатор хорошо установлен.

ответ

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