克隆一对多关系自引用后数组为空
Array empty after cloning one to many relation self reference
我正在尝试克隆一个实体,在 class 中有一个一对多的自引用,目标是显示如下:
parent entity:
product {
id: 34
parent_product_id: null
clone_products_id: [12,45,24]
}
child clone entity:
product {
id: null
parent_product_id: 34
clone_products_id: null
}
我成功克隆了实体,但在父数组中 clone_products_id 的值始终为 null,并且无法弄清楚为什么。我的实体代码:
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="parentProduct", cascade={"persist"})
*/
private $clonedProduct;
/**
* @ORM\ManyToOne(targetEntity="Product", inversedBy="clonedProduct", cascade={"persist"})
* @ORM\JoinColumn(name="parent_product_id",referencedColumnName="id")
*/
private $parentProduct;
public function __construct(){
$this->clonedProduct = new \ArrayCollection();
}
//getting the ids of the clones
/*
* @Groups({"product"})
*/
public function getClonedProductIds(){
$clones = $this->getClonedProduct();
$idsClone = new \ArrayCollection();
foreach ($clones as $item) {
$id = $item->getId();
$idsClone->add($id);
}
return $idsClone;
}
和克隆函数:
public function clone(Product $product){
$em = $this->container->get('doctrine.orm.entity_manager');
$clonedProduct = clone $product;
$clonedProduct->setParentProduct($product);
$em->persist($clonedProduct);
$em->flush();
return $clonedProduct;
}
以及调用克隆函数的主函数:
public function productAction(){
$clonedProduct = $productRepo()->clone($product);
return $this->json($clonedProduct, Response::HTTP_OK, [],
['groups' => ['product']]);
}
所以唯一的问题是克隆的 ID 不在 clonedProduct 数组中。知道如何解决吗?
我解决了这个问题,
我创建了方法:
public function addToArray($product)
{
this->clonedProduct[] = $product;
return $this;
}
我正在尝试克隆一个实体,在 class 中有一个一对多的自引用,目标是显示如下:
parent entity:
product {
id: 34
parent_product_id: null
clone_products_id: [12,45,24]
}
child clone entity:
product {
id: null
parent_product_id: 34
clone_products_id: null
}
我成功克隆了实体,但在父数组中 clone_products_id 的值始终为 null,并且无法弄清楚为什么。我的实体代码:
/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="parentProduct", cascade={"persist"})
*/
private $clonedProduct;
/**
* @ORM\ManyToOne(targetEntity="Product", inversedBy="clonedProduct", cascade={"persist"})
* @ORM\JoinColumn(name="parent_product_id",referencedColumnName="id")
*/
private $parentProduct;
public function __construct(){
$this->clonedProduct = new \ArrayCollection();
}
//getting the ids of the clones
/*
* @Groups({"product"})
*/
public function getClonedProductIds(){
$clones = $this->getClonedProduct();
$idsClone = new \ArrayCollection();
foreach ($clones as $item) {
$id = $item->getId();
$idsClone->add($id);
}
return $idsClone;
}
和克隆函数:
public function clone(Product $product){
$em = $this->container->get('doctrine.orm.entity_manager');
$clonedProduct = clone $product;
$clonedProduct->setParentProduct($product);
$em->persist($clonedProduct);
$em->flush();
return $clonedProduct;
}
以及调用克隆函数的主函数:
public function productAction(){
$clonedProduct = $productRepo()->clone($product);
return $this->json($clonedProduct, Response::HTTP_OK, [],
['groups' => ['product']]);
}
所以唯一的问题是克隆的 ID 不在 clonedProduct 数组中。知道如何解决吗?
我解决了这个问题, 我创建了方法:
public function addToArray($product)
{
this->clonedProduct[] = $product;
return $this;
}