Администратор Sonata - Невозможно заставить sonata_type_collection работать с модальным окном

В моем администраторе у меня есть OneToMany, определенный как он:

/**
 * @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» и «table», идентификатор установлен правильно.


person CyrilleGuimezanes    schedule 02.12.2016    source источник


Ответы (2)


Имел ту же проблему и решил ее, переопределив методы 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); 
    }
}
person Frank B    schedule 03.12.2016

После долгого обсуждения в Sonata Admin GitHub здесь:

https://github.com/sonata-project/SonataAdminBundle/issues/4236

Проблема частично решена ...

person CyrilleGuimezanes    schedule 16.12.2016