Мне нужно сделать простую вставку в базу данных,
Вот код в контроллере:
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».
Пожалуйста, помогите мне решить эту ошибку.
Я также новичок в php, но вы устанавливаете $ provider как целое = 2, а ваше отношение ожидает объект Provider Provider.
Вы смешиваете понятия Doctrine relation
и базы данных с foreign key
(они очень близки, но не одинаковы). Проблема заключается в том, что вы не можете обрабатывать идентификатор связанного объекта как связанный объект в Доктрине. Вам нужно передать весь связанный объект, а не только foreign key
.
Существует по крайней мере два решения:
store
(1) и идентификатора provider
(2) сначала извлекайте эти объекты из базы данных ( $em->find(...)
). 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'); }