Мне нужно сделать простую вставку в базу данных,
Вот код в контроллере:
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
понятия (они очень близки, но не совпадают). Проблема в том, что вы не можете трактовать идентификатор связанной сущности как связанную сущность в Doctrine. Вам нужно передать всю связанную сущность, а не только 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');
}