【问题标题】:How to set correct Doctrine cascade relationship?如何设置正确的 Doctrine 级联关系?
【发布时间】:2018-02-12 10:59:05
【问题描述】:

我有一个旧的 Page 实体和一个新的 Equivalent 实体。我的 Page.orm.xml 现在已被编辑为包含以下内容:

    <one-to-many target-entity="AppBundle\Entity\Equivalent" field="equivalents">
        <cascade>
            <cascade-all/>
        </cascade>
    </one-to-many>

...并且我的 PageAdmin 类已被编辑为包含以下内容:

            ->add('equivalents', 'sonata_type_collection', array(
                'label' => "Equivalents",
                'cascade_validation' => true,
                'required' => false,
            ), array(
                'edit' => 'inline',
                'inline' => 'table',
                'targetEntity' => 'AppBundle\Entity\Equivalent',
            ))

...我的等效实体定义包括以下内容:

/**
 * @var \Application\Sonata\PageBundle\Entity\Page
 * @ORM\ManyToOne(targetEntity="Application\Sonata\PageBundle\Entity\Page", cascade={"persist"})
 */
private $page;

到目前为止一切顺利。当我编辑一个页面时,我得到一个流畅的界面,允许我在内联表单中添加和编辑新的等效记录。非常好。

当我尝试保存 Page 实体时,我的问题出现了。我收到以下错误:

通过关系发现了一个新实体 'Application\Sonata\PageBundle\Entity\Page#equivalents' 不是 配置为实体级联持久化操作:一些等价物。 要解决这个问题:要么显式调用 EntityManager#persist() 这个未知实体或配置级联将这个关联保持在 例如@ManyToOne(..,cascade={"persist"}) 的映射。

我做错了什么?我现有的级联定义不应该涵盖这种行为吗?我该怎么做才能解决这个问题?

【问题讨论】:

    标签: php symfony doctrine sonata-admin


    【解决方案1】:

    定义缺少关联字段。将映射者添加到:

    <one-to-many target-entity="AppBundle\Entity\Equivalent" field="equivalents" mapped-by="page">
        <cascade>
            <cascade-all/>
        </cascade>
    </one-to-many>
    

    inversedBy到:

    /**
     * @var \Application\Sonata\PageBundle\Entity\Page
     * @ORM\ManyToOne(targetEntity="Application\Sonata\PageBundle\Entity\Page", inversedBy="equivalents", cascade={"persist"})
    */
    private $page;
    

    参考文献

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多