由Doctrine和SymfonySeoBundle复制OneToOne关系

时间:2017-01-30 19:06:24

标签: symfony doctrine sonata symfony-cmf

我在本文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属性的特殊表单类型 - SeoMetadataTypehttp://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的新记录。

我已调试更新流程,在persistflush操作之前,我在SeoMetadata属性$seoMetadata的代理已存在id,但是在persistflush操作之后,我会看到新的id代理和表中的新记录。

有人知道什么是错的吗?

1 个答案:

答案 0 :(得分:0)

我们确实有一些ORM示例,但不完全支持它。但是,你可以通过在这里添加一些代码来重现你的持久性问题:https://github.com/symfony-cmf/seo-bundle/blob/master/tests/Functional/Doctrine/Orm/SeoMetadataTest.php只需做一个公关,我会尝试修复它。但也可能是,问题出现在奏鸣曲或表格中。