![](/img/trans.png)
[英]Persisting parent entity with OneToMany relationship make child entity entity_id field NULL in MySQL
[英]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.