Doctrine2:将现有实体添加到父级,复制父级

Doctrine2: Adding existing entity to parent, duplicates the parent

我有两个相关的 类 (OneToMany):

<?php
class Container {
    /**
     * @var Content[]
     * @\Doctrine\ORM\Mapping\OneToMany(targetEntity="Content", mappedBy="contents", cascade={"remove"})
     */
    protected $contents;
}

class Content {
    /**
     * @var Container
     * @\Doctrine\ORM\Mapping\ManyToOne(targetEntity="Container", inversedBy="contents", cascade={"persist"})
     */
    public $container;
}

现在,当我添加新的内容项时,容器将在数据库中复制,新的内容项链接到副本。

我使用父Container的id,像这样:

<?php
$newContent->container = $repository->find($passedIdOfContainer);

// ...

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

所以基本上我只是从数据库中获取现有实体记录(有效),并使用现有对象设置我的新内容对象的属性。但是现在父(容器)将被复制。

当我删除 cascade={"persist"} 时,出现以下错误:

A new entity was found through the relationship 'Content#Container' that was not configured to cascade persist operations for entity: Container@0000...

我需要做什么,以创建新的子项,参考父项,而不复制数据库中的父项?

use Doctrine\ORM\Mapping as ORM;

class Container
{
    /**
     * @var object
     *
     * @ORM\OneToMany(
     *      targetEntity="Content",
     *      mappedBy="container",
     *      cascade={"persist", "remove"}
     * )
     */
    protected $contents;
}

use Doctrine\ORM\Mapping as ORM;

class Content
{
    /**
     * @var object
     *
     * @ORM\ManyToOne(
     *      targetEntity="Container",
     *      inversedBy="contents"
     * )
     * @ORM\JoinColumn(
     *      name="container_id",
     *      referencedColumnName="id",
     *      onDelete="CASCADE",
     *      nullable=false
     * )
     */
    protected $container;
}

假设您在 Container 实体文件中设置了所有方法,因此:

//......
$container->addContents($contentObject);

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