【问题标题】:How to link an entity with database?如何将实体与数据库链接?
【发布时间】:2013-02-01 10:47:45
【问题描述】:

我有一个具有许多关系的复杂实体,因此我需要在许多页面中创建多个表单来创建一个。因此,我使用会话来保留我的实体。 一切正常,但是到了刷新的时候,实体管理器返回“通过关系的实体未配置为级联持久化”,认为某些实体是新的,但它们实际上存储在 db 中!

例如,我使用 $u->setGroup(Group $group); 创建了一个具有多对一组的用户; ($group 是数据库中的现有组)。当我将它放入会话中,然后将其放回另一个页面并刷新它时,实体管理器会尝试创建一个全新的组,但不知道它是 db 中的现有组。

我用了一个小技巧来克服这个问题:

$u = $this->get('session')->get('userToAdd');
$group = $em->getRepository('MyBundle\Entity\Group')->find($u->getGroup()->getId());
$u->setGroup($group);

这样,EM 将识别存储在 db 中的组,并且刷新会正常进行,但是由于我的实体具有如此多的关系,因此对每个实体都执行此操作非常方便。

对这个问题有什么想法吗?

【问题讨论】:

    标签: session symfony entity-relationship entitymanager flush


    【解决方案1】:

    在查找组之前尝试刷新 $u 对象。

    $em->refresh($u)
    

    【讨论】:

    • 实体不受管理。如果实体从数据库中获取或通过 EntityManager#persist 注册为新实体,则该实体被管理:-(
    【解决方案2】:

    你必须这样做:

    $em->merge($u);
    

    【讨论】:

    • 这应该是一条评论。
    • 我不知道,抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多