2017-10-29 12 views
0

を挿入Iは、データベース内の単純な挿入を行う必要があり、ここでsymfonyの3表に

は、コントローラ内のコードである:

public function verifCreateOrder(Request $req){ 
     $store = 1; 
     $provider =2; 
     $creation = $creation_start = $req->get('creation_start'); 
     $delivery = $creation_start = $req->get('creation_start'); 

     $em = $this->getDoctrine()->getManager(); 

     $order = new OrderList(); 
     $order->setNumStore($store); 
     $order->setNumProvider($provider); 
     $order->setCreation($creation); 
     $order->setDelivery($delivery); 

     $em->persist($order); 
     $em->flush(); 
     die(); 
     return $this->redirectToRoute('search.view'); 
    } 

オーダーリストエンティティのコード:

class OrderList 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var int 
    * 
    * @ORM\ManyToOne(targetEntity="Provider") 
    * @ORM\JoinColumn(name="num_provider", referencedColumnName="id") 
    */ 
    private $numProvider; 

    /** 
    * @var int 
    * 
    * @ORM\ManyToOne(targetEntity="Store") 
    * @ORM\JoinColumn(name="num_store", referencedColumnName="id") 
    */ 
    private $numStore; 

    /** 
    * @return int 
    */ 
    public function getNumStore() 
    { 
     return $this->numStore; 
    } 

    /** 
    * @param int $numStore 
    */ 
    public function setNumStore($numStore) 
    { 
     $this->numStore = $numStore; 
    } 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="creation", type="date") 
    */ 
    private $creation; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="delivery", type="date") 
    */ 
    private $delivery; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="last_update", type="date", nullable=true) 
    */ 
    private $lastUpdate; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="emission", type="date", nullable=true) 
    */ 
    private $emission; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="reduction_1", type="integer", nullable=true) 
    */ 
    private $reduction1; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="reduction_2", type="integer", nullable=true) 
    */ 
    private $reduction2; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="comment", type="string", nullable=true, length=255) 
    */ 
    private $comment; 
ここで

はsymfonyによって返されるエラーです:

関連フィールド "AppBundle \ Entity \ OrderList#$ numProvider"の "AppBundle \ Entity \ Provider"タイプの期待値は、代わりに "整数"を取得しました。

私はこのエラーを解決してください。

答えて

1

私はphpの新機能ですが、$ providerを整数= 2に設定し、リレーションシップにオブジェクトProvider $ providerが必要です。

2

Doctrine relationとデータベースforeign keyのコンセプト(非常に近いが同じではない)を混在させています。問題は、関連するエンティティ識別子をDoctrineの関連エンティティとして扱うことができないことです。 foreign keyだけでなく、関連するエンティティ全体を渡す必要があります。

少なくとも二つの解決策があります。その代わりstore(1)の識別子を渡す

  1. providerの識別子(2)、まず、データベース($em->find(...))からこのエンティティを検索するには。
  2. getReferenceメソッドでdoctrineをトリックすると、id($em->getReference('Path\To\Store', 1$em->getReference('Path\To\Provider', 2)の必要なオブジェクトのプロキシが返されます。

さらに詳しい情報が必要な場合は、reference proxiesrelationsをご確認ください。

public function verifyCreateOrder(Request $req){ 
    $storeId = 1; 
    $providerId = 2; 
    $creation = $creation_start = $req->get('creation_start'); 
    $delivery = $creation_start = $req->get('creation_start'); 

    $em = $this->getDoctrine()->getManager(); 
    // getting references 
    $store = $em->getReference(Store::class, $storeId); 
    $provider = $em->getReference(Provider::class, $providerId); 

    $order = new OrderList(); 
    $order->setNumStore($store); 
    $order->setNumProvider($provider); 
    $order->setCreation($creation); 
    $order->setDelivery($delivery); 

    $em->persist($order); 
    $em->flush(); 
    die(); 
    return $this->redirectToRoute('search.view'); 
} 
+0

ありがとうございます – Sofian