Вставить в таблицу 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'); } 

Код объекта OrderList:

 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 \ Provider» для поля ассоциации «AppBundle \ Entity \ OrderList # $ numProvider», вместо этого получило «integer».

Пожалуйста, помогите мне решить эту ошибку.

Solutions Collecting From Web of "Вставить в таблицу symfony 3"

Я также новичок в php, но вы устанавливаете $ provider как целое = 2, а ваше отношение ожидает объект Provider Provider.

Вы смешиваете понятия Doctrine relation и базы данных с foreign key (они очень близки, но не одинаковы). Проблема заключается в том, что вы не можете обрабатывать идентификатор связанного объекта как связанный объект в Доктрине. Вам нужно передать весь связанный объект, а не только foreign key .

Существует по крайней мере два решения:

  1. Вместо передачи идентификатора store (1) и идентификатора provider (2) сначала извлекайте эти объекты из базы данных ( $em->find(...) ).
  2. Вы можете обмануть доктрину методом getReference , который должен вернуть вам прокси нужного объекта с id ( $em->getReference('Path\To\Store', 1 и $em->getReference('Path\To\Provider', 2 ).

Если вам нужна дополнительная информация, вы можете проверить эти документы: ссылки на прокси и отношения .

 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'); }