2017-10-05 76 views
1

我想克隆一个实体,其在班里一个一对多的自我参照和目标是显示如下:阵列空克隆一对多的关系后自我引用

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数组的值始终为空,并且无法找出原因。我的实体代码:

/** 
* @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']]); 
} 

所以,唯一的问题是对的IDS克隆不在克隆的产品数组中。任何想法如何解决它?

回答

0

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

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