2016-12-02 7 views
0

In meinem Admin zu bekommen habe ich ein OneToMany wie es definiert:Sonata Admin - Unable sonata_type_collection Arbeit mit modaler

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

Und die inversed Seite:

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

In meiner Admin-Klasse I definierte die 'Module' Feld als es:

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

schließlich in der ModuleSequence Entity hier ist die addModule Methode:

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

     return $this; 
    } 

Ich habe die Schaltfläche "Hinzufügen", ich bekomme das modale, ich fülle es und validiere. Die Ajax-Anforderung wird an den Profiler gesendet, aber keine neue Zeile angezeigt.

Die 'sequence_id' ist nicht in der Datenbank und ich weiß nicht warum ... Irgendeine Idee bitte?

Wenn ich die 'inline' & 'Tabelle' Optionen verwende, ist die ID gut eingestellt.

Antwort

0

Hatte das gleiche Problem und löste es mit dem Überschreiben der PrePersist und PreUpdate Methoden und dann bestehen die Assoziationen.

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