私は私の関係に立ち往生しています。ここで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(),
));
}
いいですか?
あなたの助けにはThx!
編集:$ 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に加工テーブルには、次のとおりです。PRODUCT_IDがnullです。
私はすでに加工でsetProductを修正しようとしましたが、それでも同じです。
$this->machining[] = $machining;
$machining->setOrderproduct($this);
return $this;
同じ他のエンティティ(もちろん別のメソッド名とプロパティ)のために:Orderproduct」addMachining($加工)の方法で
:
フラッシュする前にすべてのエンティティを保持してください。時には、関連するエンティティを最初にフラッシュする必要があります... id(カスケードはそれを解決する可能性があります)を持っているので。 –
私はこの '$ em = $ this-> getDoctrine() - > getManager()を試しました。 $ em-> persist($ orderproduct); $ em-> flush(); ' – Wako
もコードなしでデバッグするのはかなり難しいです...あなたが関係を設定した部分を少なくともコピーして、永続してフラッシュしてください –