一对多双向不起作用

时间:2016-01-07 08:57:22

标签: php symfony doctrine-orm

我有两个实体,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()
        ));
    }

问题出在哪里?

1 个答案:

答案 0 :(得分:1)

您必须在实体方面坚持实体才能使其发挥作用。在您的情况下,这意味着您必须在要添加的persist上明确调用$articulosDefectuosos。 查看the doctrine 2 documentation here了解详情。

  

忽略仅对关联的反面进行的更改。确保更新双向关联的两面(或至少从Doctrine的角度更新所有方)