![](/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.