2014-01-15 96 views
1

我試圖管理與sonata admin一對多關係實體不保存id字段

一個一對多的關係其實我想有多對多的關係就像sonata media bundlegallery > media

一個HomePage有很多Story小號這應該是排序等
也Theres HomePageStory管理的關係,因爲這裏建議:
https://github.com/sonata-project/SonataAdminBundle/issues/1231

HomePage.orm.yml

oneToMany: 
     HomePageStorys: 
      targetEntity: HomePageStory 
      mappedBy: HomePage 
      cascade: ["persist", "merge", "remove"] 

HomePageAdmin.php

 ->add(
      'HomePageStorys', 
      'sonata_type_collection', 
      array(
       'cascade_validation' => true, 
     ), 
      array(
       'edit' => 'inline', 
       'inline' => 'table', 
       'sortable' => 'position' 
     ) 
    ); 

HomePageStory.orm.yml

manyToOne: 
     HomePage: 
      targetEntity: HomePage 
      joinColumn: 
       name: homepage_id 
       referencedColumnName: id 

     Story: 
      targetEntity: Story 
      joinColumn: 
       name: story_id 
       referencedColumnName: id 

HomePageStoryAdmin

protected function configureFormFields(FormMapper $formMapper) 
    { 
     $link_parameters = array(); 

     if ($this->hasParentFieldDescription()) { 
      $link_parameters = $this->getParentFieldDescription()->getOption('link_parameters', array()); 
     } 

     if ($this->hasRequest()) { 
      $context = $this->getRequest()->get('context', null); 

      if (null !== $context) { 
       $link_parameters['context'] = $context; 
      } 
     } 

     $formMapper 
      ->add(
       'Story', 
       'sonata_type_model_list', 
       array('required' => false), 
       array(
        'link_parameters' => $link_parameters 
      ) 
     ) 
      ->add('position', 'hidden'); 
    } 

這工作得很好,因爲我可以在HomePage Admin上添加HomePageStories並從內聯列表中選擇一個Story。

它只是存儲在數據庫中的story_idhomepage_id保持爲空。如果我手動設置homepage_id,它會顯示在主頁管理中。

任何線索我需要做什麼來保存父實體(HomePage)的ID保存?

回答

3

HM,好像你必須手動設置父實體對相關兒童...

雖然不知道這是否是真的有必要或「官路」,下面的伎倆:

HomePageAdmin.php

public function prePersist($homepage) 
{ 
    foreach ($homepage->getHomePageStorys() as $homepagestory) { 
     $homepagestory->setHomePage($homepage); 
    } 
} 

/** 
* {@inheritdoc} 
*/ 
public function preUpdate($homepage) 
{ 
    foreach ($homepage->getHomePageStorys() as $homepagestory) { 
     $homepagestory->setHomePage($homepage); 
    } 
} 
+2

這是索納塔 「已知」 的錯誤。但問題是,索納塔指責這一點,反之亦然。所以它可能不會被修復。 – NoScope