2017-05-09 63 views
0

我被我的關係困住了。Doctrine JoinColumn id爲空

這裏是我的實體:

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

任何想法?

Thx爲您的幫助!

編輯:把$ 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; 

之間的關係這是我的數據庫加工臺:PRODUCT_ID爲空。 enter image description here

我已經嘗試修改加工中的setProduct,但它仍然是一樣的。

+0

嘗試在沖洗前堅持所有實體。有時它需要先刷新相關的實體...所以它會有id(cascade persist可以解決這個問題) –

+0

我試過這個'$ em = $ this-> getDoctrine() - > getManager(); $ em-> persist($ orderproduct); $ em-> flush(); ' – Wako

+0

也沒有代碼,它很難調試它...至少複製你設置關係的部分,堅持並沖洗 –

回答

0

試試這個:

在Orderproduct」 addMachining($加工)方法:

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

同爲其他實體(當然不同的方法名和屬性)。如果這不起作用,請嘗試單獨堅持所有實體。

+0

它不會自動與級聯持續? – Wako

+0

我編輯我的帖子。 – Wako

0

所以我找到了一個解決方案:

在buildForm只需添加

'by_reference => false' 

現在,它的工作!