Есть сущности
Order
и
Product
. Между ними прописана связь ManyToMany:
App\Entity\Order.php
/**
* @ORM\ManyToMany(targetEntity=Product::class, inversedBy="orders", cascade={"persist"})
*/
private $products;
App\Entity\Product.php
/**
* @ORM\ManyToMany(targetEntity=Order::class, mappedBy="products")
*/
private $orders;
В сущности
Order
есть метод для добавления связанных продуктов:
public function addProduct(Product $product): self
{
if (!$this->products->contains($product)) {
$this->products[] = $product;
}
return $this;
}
Вот код, которым создаю пользователя, заказ и привязываю к заказу продукты из корзины пользователя. Именно здесь и происходит ошибка. В
$product['product']
экземпляр класса
Product
из корзины.
App\Controller\CheckoutController.php
$user = new User();
$password = $this->encoder->encodePassword($user, $data['password']);
$user->setEmail($data['email']);
$user->setUsername($data['username']);
$user->setFirstName($data['first_name']);
$user->setLastName($data['last_name']);
$user->setPassword($password);
$user->setRoles('ROLE_USER');
$em->persist($user);
$em->flush();
//Создаем новый заказ.
$order = new Order();
$order->setUserId($user);
$order->setDate(new \DateTime());
$order->setStatus('new');
$order->setTotal($this->cartService->getTotal());
//Проблемный участок кода. Без него все работает нормально
foreach ($this->cartService->getCartContent() as $product) {
$order->addProduct($product['product']);
}
$em->persist($order);
$em->flush(); // Ошибка на данной строке, судя по дебаггеру Симфони.
Ниже скриншот ошибки. Насколько я понимаю, он не может корректно проставить связи между заказом и продуктами из заказа.