克隆一对多关系自引用后数组为空

时间:2017-10-05 20:14:50

标签: symfony doctrine clone one-to-many

我正在尝试克隆一个实体,在课堂上进行一对多的自我引用,目标是显示如下:

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数组中。知道怎么解决吗?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题, 我创建了方法:

public function addToArray($product)
{ 
   this->clonedProduct[] = $product;
   return $this;
}