【问题标题】:Error persisting a Symfony2 Entity: A new entity was found持久化 Symfony2 实体时出错:找到了一个新实体
【发布时间】:2014-02-14 08:00:28
【问题描述】:

我对 symfony 2 有这个问题:

“通过关系‘Acme\AcmeBundle\Entity\MainEntity#person’找到了一个新实体,该实体未配置为对实体进行级联持久操作:JOHN DOE CORP。要解决此问题:要么显式调用 EntityManager#persist( ) 在此未知实体上或配置级联在映射中保留此关联,例如 @ManyToOne(..,cascade={"persist"})。"

MainEntity 是一个普通实体,带有一个“person”字段,它是与 People 实体的多对一关系。 People 实体是一个只读实体,但我不知道为什么要创建一个新的 Person。

当我通过表单更新 MainEntity 时会发生这种情况。表单的定义是:

    $builder
        ->add('code')
        ->add('type')
        ->add('person', new PeopleType())
        ->add('Save', 'submit');

而 PeopleType 是:

    $builder
            ->add('name', 'text', array('read_only' => true))
            ->add('idNumber', 'text', array('read_only' => true))
            ->add('address', new AddressType());

如您所见,无法更改 Person 字段,所以我不明白这里发生了什么...有什么线索吗?

【问题讨论】:

  • 您的实体中有一个关系,您需要在其上添加cascade={"persist"}...您可以显示您的实体的代码吗?
  • 我无法添加 cascade={"persist"},因为 People 表必须是只读表,因此无法创建新人。无论如何,AFAIK 我还没有创建任何新人......

标签: symfony


【解决方案1】:

我找到了。我犯了一个非常愚蠢的错误:在更新数据之前我没有加载我的实体,所以每次我尝试更新实体时,我都会创建一个新实体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多