Reputation: 131
I need to make a simple insertion in the database,
Here is the code in the controller:
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');
}
The code of the OrderList entity :
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;
Here is the error returned by symfony:
Expected value of type "AppBundle\Entity\Provider" for association field "AppBundle\Entity\OrderList#$numProvider", got "integer" instead.
Please help me resolve this error.
Upvotes: 0
Views: 2517
Reputation: 390
I am also new to php but, you set $provider to be a integer = 2, and your relation expect object Provider $provider.
Upvotes: 1
Reputation: 2287
You are mixing the Doctrine relation
and database foreign key
concepts (they are very close, but not the same). The problem is that you can't treat related entity identifier as related entity in Doctrine. You need to pass whole related entity and not just foreign key
.
There are at least two solutions:
store
(1) and identifier of provider
(2), firstly retrieve this entities from the database ($em->find(...)
).getReference
method, that should return you a proxy of needed object with id ($em->getReference('Path\To\Store', 1
and $em->getReference('Path\To\Provider', 2
).If you want more information, you can check these docs: reference proxies and relations.
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');
}
Upvotes: 2