2016-01-07 53 views
0

我有两个实体,DevolucionProveedorArticuloDefectuoso,它们之间有一个从DevolucionProveedorArticuloDefectuoso的OneToMany关系。一对多双向不工作

当我尝试创建一个新的DevolucionProveedor并尝试添加一个或多个实体ArticuloDefectuoso时,这些不相关联。

这是我的关系:

#ArticuloDefectuoso 

    /** 
    * @ORM\ManyToOne(targetEntity="CeiferIT\VentasAlmacenBundle\Entity\DevolucionProveedor", inversedBy="articulosDefectuosos") 
    * @ORM\JoinColumn(name="devolucionProveedor", referencedColumnName="id") 
    */ 
    protected $devolucionProveedor; 

    //Methods 

    /** 
    * Set devolucionProveedor 
    * 
    * @param \CeiferIT\VentasAlmacenBundle\Entity\DevolucionProveedor $devolucionProveedor 
    * @return ArticuloDefectuoso 
    */ 
    public function setDevolucionProveedor(\CeiferIT\VentasAlmacenBundle\Entity\DevolucionProveedor $devolucionProveedor = null) 
    { 
     $this->devolucionProveedor = $devolucionProveedor; 

     return $this; 
    } 

    /** 
    * Get devolucionProveedor 
    * 
    * @return \CeiferIT\VentasAlmacenBundle\Entity\DevolucionProveedor 
    */ 
    public function getDevolucionProveedor() 
    { 
     return $this->devolucionProveedor; 
    } 

#DevolucionProveedor 


    /** 
    * @ORM\OneToMany(targetEntity="CeiferIT\VentasAlmacenBundle\Entity\ArticuloDefectuoso", mappedBy="devolucionProveedor", cascade={"persist", "remove"}) 
    */ 
    protected $articulosDefectuosos; 

    public function __construct(){ 
     $this->articulosDefectuosos = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 
    //methods 


    /** 
    * Add articulosDefectuosos 
    * 
    * @param \CeiferIT\VentasAlmacenBundle\Entity\ArticuloDefectuoso $articulosDefectuosos 
    * @return DevolucionProveedor 
    */ 
    public function addArticulosDefectuoso(\CeiferIT\VentasAlmacenBundle\Entity\ArticuloDefectuoso $articulosDefectuosos) 
    { 
     $articulosDefectuosos->setDevolucionProveedor($this); 
     $this->articulosDefectuosos[] = $articulosDefectuosos; 

     return $this; 
    } 

    /** 
    * Remove articulosDefectuosos 
    * 
    * @param \CeiferIT\VentasAlmacenBundle\Entity\ArticuloDefectuoso $articulosDefectuosos 
    */ 
    public function removeArticulosDefectuoso(\CeiferIT\VentasAlmacenBundle\Entity\ArticuloDefectuoso $articulosDefectuosos) 
    { 
     $this->articulosDefectuosos->removeElement($articulosDefectuosos); 
    } 

    /** 
    * Get articulosDefectuosos 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getArticulosDefectuosos() 
    { 
     return $this->articulosDefectuosos; 
    } 

我的控制器:

public function nuevoAction(Request $request) 
    { 

     $em= $this->getDoctrine()->getManager(); 

     $devolucionProveedor = new DevolucionProveedor(); 
     $formulario = $this->createForm(new DevolucionProveedorType(), $devolucionProveedor, array(
      'action' => $this->generateUrl('devolucionesProveedor_nuevo'), 
      'attr' => array(
       'novalidate' => 'novalidate' 
      ), 
      'method' => 'POST', 
     )); 

     $formulario->handleRequest($request); 

     if($formulario->isValid()){ 
      $this->get('session')->getFlashBag()->add(
       'exito', 
       'Nueva devolucion anadida correctamente' 
      ); 
      $em->persist($devolucionProveedor); 
      $em->flush(); 
      return $this->redirect($this->generateUrl("devolucionesProveedor_index")); 
     } 

     return $this->render('VentasAlmacenBundle:DevolucionesProveedor:nuevo.html.twig', array(
      "formulario" => $formulario->createView() 
     )); 
    } 

问题出在哪里?

+0

当启动时:'app/console doctrine:schema:validate'是否有错误消息? – scoolnico

+0

你在哪里添加ArticuloDefectuoso到你的DevolucionProveedor。我在代码中看不到这一点。 – Wilt

+0

@将在方法addArticulosDefectuoso我setter DevolucionProveedor在articuloDefectuoso实体 –

回答

1

你必须坚持自己一方的实体来完成这项工作。在你的情况下,这意味着你必须明确地呼叫您要添加的$articulosDefectuosos上的persist。 检查the doctrine 2 documentation here了解更多信息。

仅针对关联反面进行的更改将被忽略。请确保更新双向关联的双方(或至少从主体的角度来看拥有方)

+0

哦,谢谢你!我在我的控制器中添加了一个foreach,将$ devolucion-> getArticulosDefectuosos作为$ articulo,$ articulo-> setDevolucionProveedor($ devolucion),并且这个工作,谢谢! –

+0

你能用你的foreach代码更新你的问题吗?你真的不应该坚持每个$ articulosDefectuosos。也许我只是不理解你的评论。 – Cerad

+0

@Cerad你应该直接在Ivan的评论。我不认为他会在我的回答中留言时得到通知。至少不是没有@注释 – Wilt