oneToMany relation entity does not save id field

孤者浪人 提交于 2019-12-13 17:24:30

问题


I'm trying to manage a oneToMany relation with sonata admin

Actually I'd like to have manyToMany relation like sonata media bundle has with gallery > media

A HomePage has many Storys which should be sortable etc.
Theres also HomePageStory to manage the relation, as suggested here:
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');
    }

This works fine so far, as i can add HomePageStories on the HomePage Admin and pick a Story from the list inline.

But it just stores the story_id in the database while homepage_id stays empty. If I set the homepage_id by hand, it's displayed in the homepage admin.

Any clue what I need to do to store the id of the parent entity (HomePage) on save?


回答1:


hm, seems as if you manually have to set the parent entity on the related children...

While not sure if it is really necessary or "the official way", the following did the trick:

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


来源:https://stackoverflow.com/questions/21141673/onetomany-relation-entity-does-not-save-id-field

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!