2017-05-09 15 views
0

私は私の関係に立ち往生しています。ここでDoctrine JoinColumn id is Null

は私のエンティティです:

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; 

との関係を持っているこれは私のDBに加工テーブルには、次のとおりです。PRODUCT_IDがnullです。 enter image description here

私はすでに加工でsetProductを修正しようとしましたが、それでも同じです。

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

同じ他のエンティティ(もちろん別のメソッド名とプロパティ)のために:Orderproduct」addMachining($加工)の方法で

+0

フラッシュする前にすべてのエンティティを保持してください。時には、関連するエンティティを最初にフラッシュする必要があります... id(カスケードはそれを解決する可能性があります)を持っているので。 –

+0

私はこの '$ em = $ this-> getDoctrine() - > getManager()を試しました。 $ em-> persist($ orderproduct); $ em-> flush(); ' – Wako

+0

もコードなしでデバッグするのはかなり難しいです...あなたが関係を設定した部分を少なくともコピーして、永続してフラッシュしてください –

答えて

0

はこれを試してみてください。これが動作しない場合は、すべてのエンティティを別々に保持してください。

+0

カスケードが自動的に持続するのではないのですか? – Wako

+0

私の投稿を編集します。 – Wako

0

だから私は解決策を見つけた:buildFormで

は単に

'by_reference => false' 

を追加し今では仕事です!