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();
我有两个相关的 类 (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();