Doctrine JoinColumn id为Null

时间:2017-05-09 07:23:39

标签: symfony doctrine-orm

我坚持与我的关系。

这是我的实体:

class Orderproduct 
    /**
     * @ORM\OneToMany(targetEntity="ProductBundle\Entity\Product", mappedBy="orderproduct", cascade={"persist"})
     */
    private $product;

    /**
     * @ORM\OneToMany(targetEntity="ProductBundle\Entity\Machining", mappedBy="orderproduct", cascade={"persist"})
     */
    private $machining;

我的另外两个实体:

class Product
    /**
     * @ORM\ManyToOne(targetEntity="ProductBundle\Entity\Orderproduct", inversedBy="product")
     * @ORM\JoinColumn(name="orderproduct_id", referencedColumnName="id", nullable=false)
     */
    private $orderproduct;

class Machining
    /**
     * @ORM\ManyToOne(targetEntity="ProductBundle\Entity\Orderproduct", inversedBy="machining")
     * @ORM\JoinColumn(name="orderproduct_id", referencedColumnName="id", nullable=false)
     */
    private $orderproduct;

我发现了这个错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'orderproduct_id' ne peut être vide (null)

这是我的简单添加功能

public function addOrderproductAction(Request $request)
    {
        $orderproduct = new Orderproduct();

        $formorderproduct = $this->createForm(OrderproductType::class, $orderproduct);


        if($formorderproduct->handleRequest($request)->isValid())
        {

            $em = $this->getDoctrine()->getManager();
            $em->persist($orderproduct);
            $em->flush();

            return $this->redirect($this->generateUrl('product_bundle_listorderproduct'));
        }


        return $this->render('ProductBundle:Default:neworderproduct.html.twig', array(
            'formorderproduct' => $formorderproduct->createView(),
        ));

    }

我在冲洗之前使用转储得到了这个:enter image description here

有什么想法吗?

谢谢你的帮助!

编辑:放入$ product-> getOrderproduct($ this)和$ machining-> getOrderproduct($ this)之后。 enter image description here

修改:

我改变了我的模型,但仍然遇到同样的问题。所以我有产品和加工之间的关系

产品

    /**
     * @ORM\OneToMany(targetEntity="ProductBundle\Entity\Machining", mappedBy="product", cascade={"persist"})
     */
    private $machining;

加工

/**
 * @ORM\ManyToOne(targetEntity="ProductBundle\Entity\Product", inversedBy="machining")
 * @ORM\JoinColumn(name="product_id", referencedColumnName="id")
 */
private $product;

这是我的Db中的Machining表:product_id为null。 enter image description here

我已经尝试在Machining中修改setProduct但它仍然是相同的。

2 个答案:

答案 0 :(得分:0)

试试这个:

在Orderproduct' addMachining($ machining)方法:

$this->machining[] = $machining;
$machining->setOrderproduct($this);
return $this;

对于另一个实体(当然是不同的方法名称和属性)也是如此。如果这不起作用,请尝试单独保留所有实体。

答案 1 :(得分:0)

所以我找到了解决方案:

在buildForm中添加

'by_reference => false' 

现在它的工作!