【问题标题】:Doctrine persist entity with related entities having former entity as key学说将实体与具有前实体作为键的相关实体持久化
【发布时间】:2014-10-03 14:48:03
【问题描述】:

我有一个具有 oneToMany 关系的实体。相关实体通过第一个实体的 id + 另一个字段具有身份。我尝试在第一个实体上设置 cascade: ["persist"] 但是当我尝试持久化它时,它告诉我相关实体无法持久化,我首先必须刷新第一个实体。但是,如果我只是删除级联并刷新第一个实体,它会给出一个异常说它不会持久化,因为相关实体没有持久化,我应该将持久设置为级联。

我该如何解决这个问题?想到的唯一解决方案是:

$relatedEntities = $entity1->getRelatedEntities();
$entity1->setRelatedEntities(new ArrayCollection());
$em->persist($entity1);
$em->flush($entity1);

$entity1->setRelatedEntities($relatedEntities);
$em->flush();

还有其他方法吗?

【问题讨论】:

标签: php orm doctrine


【解决方案1】:

正如错误所说,您必须先刷新您的第一个实体。然后刷新相关实体。一些伪代码:

$entity_one = new Something();

//Now set object values

$em->persist($entity_one);
$em->flush();

$entity_two = new SomethingElse();

//Now set object values (set the related/relation to the first entity)

$em->persist($entity_two);
$em->flush()

我不完全确定您是否需要在刷新后将第一个实体设置为第二个实体。但是你可以通过尝试很容易找到;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多