我坚持与我的关系。
这是我的实体:
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(),
));
}
有什么想法吗?
谢谢你的帮助!
编辑:放入$ product-> getOrderproduct($ this)和$ machining-> getOrderproduct($ this)之后。
修改:
我改变了我的模型,但仍然遇到同样的问题。所以我有产品和加工之间的关系
产品
/**
* @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。
我已经尝试在Machining中修改setProduct但它仍然是相同的。
答案 0 :(得分:0)
试试这个:
在Orderproduct' addMachining($ machining)方法:
$this->machining[] = $machining;
$machining->setOrderproduct($this);
return $this;
对于另一个实体(当然是不同的方法名称和属性)也是如此。如果这不起作用,请尝试单独保留所有实体。
答案 1 :(得分:0)
所以我找到了解决方案:
在buildForm中添加
'by_reference => false'
现在它的工作!