Doctrine 和 SymfonySeoBundle 复制 OneToOne 关系
Posted
技术标签:
【中文标题】Doctrine 和 SymfonySeoBundle 复制 OneToOne 关系【英文标题】:Duplicate OneToOne relation by Doctrine and SymfonySeoBundle 【发布时间】:2017-06-16 01:31:06 【问题描述】:我在这篇文章 http://symfony.com/doc/current/cmf/bundles/seo/seo_aware.html 之后将 SEO 数据添加到我的实体。
class Provider implements SeoAwareInterface
/**
* @var SeoMetadataInterface
*
* @ORM\OneToOne(targetEntity="Symfony\Cmf\Bundle\SeoBundle\Model\SeoMetadata", cascade="persist","remove")
* @ORM\JoinColumn(name="seo_metadata_id", referencedColumnName="id")
*/
protected $seoMetadata;
我使用 SonataAdmin 编辑 Provider
实体,并为 seoMetadata
属性使用特殊表单类型 - SeoMetadataType
(http://symfony.com/doc/current/cmf/bundles/seo/seo_aware.html#form-type)
protected function configureFormFields(FormMapper $form)
$form
// some entity related fields
->with('form.provider.seo_group_title', [
'class' => 'col-md-4',
])
->add('seoMetadata', SeoMetadataType::class, [], [
'generic_metadata' => false,
])
->end()
;
接下来是问题 - 每次我编辑 Provider
实体时,我都会获得 SeoMetadata
的新记录。
我已经调试了更新过程,在persist
和flush
操作之前我在$seoMetadata
属性中有SeoMetadata
的代理,并且存在id
,但是在persist
和flush
操作之后我看到了代理新的id
和表中的新记录。
有人知道怎么回事吗?
【问题讨论】:
【参考方案1】:我们确实有一些 ORM 示例,但并不完全支持 atm。但是您能否仅通过在此处添加一些代码来重现您的持久性问题:https://github.com/symfony-cmf/seo-bundle/blob/master/tests/Functional/Doctrine/Orm/SeoMetadataTest.php 只需做一个 PR,我会尝试修复它。但也可能是奏鸣曲或形式上的问题。
【讨论】:
以上是关于Doctrine 和 SymfonySeoBundle 复制 OneToOne 关系的主要内容,如果未能解决你的问题,请参考以下文章
PHP-Doctrine2: Items - Shops - ItemsAtShops - 如何使用Doctrine2方便地实现?