2017-10-05 10 views
1

J'essaie de cloner une entité ayant un à plusieurs auto-référencement dans la classe et l'objectif est d'afficher comme suit:tableau vide après clonage un à plusieurs relation Autoréférence

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 
} 

Je réussis à cloner l'entité, mais dans le parent la valeur de array clone_products_id est toujours nulle, et ne peut pas comprendre pourquoi. Mon code d'entité:

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

et la fonction clone: ​​

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; 
} 

et la principale fonction qui appelle notre fonction clone: ​​

public function productAction(){ 

    $clonedProduct = $productRepo()->clone($product); 
    return $this->json($clonedProduct, Response::HTTP_OK, [], 
     ['groups' => ['product']]); 
} 

Ainsi, le seul problème est que les ids de la les clones ne sont pas dans le tableau clonedProduct. Une idée de comment le résoudre?

Répondre

0

Je résolu la question, je créé la méthode:

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