繁体   English   中英

oneToMany关系实体不保存id字段

[英]oneToMany relation entity does not save id field

我正在尝试与sonata admin管理oneToMany关系

实际上我想要像sonata media bundle有很多关于gallery > media

HomePage有许多Story ,应该可以排序等。
还有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_id存储在数据库中,而homepage_id保持为空 如果我手动设置homepage_id,它会显示在主页admin中。

任何线索我需要做什么来保存父实体(HomePage)的ID?

嗯,好像你手动必须在相关的孩子上设置父实体...

虽然不确定它是否真的有必要或“官方方式”,但以下是诀窍:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM