futtern/src/EventListener/OrderItemPrePersist.php
2025-06-29 19:39:40 +02:00

35 lines
1.2 KiB
PHP

<?php declare(strict_types=1);
namespace App\EventListener;
use App\Entity\MenuItem;
use App\Entity\OrderItem;
use App\Repository\MenuItemRepository;
use Doctrine\Bundle\DoctrineBundle\Attribute\AsEntityListener;
use Doctrine\ORM\Event\PrePersistEventArgs;
use Doctrine\ORM\Events;
#[AsEntityListener(event: Events::prePersist, method: 'prePersist', entity: OrderItem::class)]
final readonly class OrderItemPrePersist
{
public function __construct(
private MenuItemRepository $menuItemRepository,
) {}
public function prePersist(OrderItem $orderItem, PrePersistEventArgs $eventArgs): void
{
$menuItem = $this->menuItemRepository->findOneBy([
'name' => $orderItem->getName(),
'foodVendor' => $orderItem->getFoodOrder()
->getFoodVendor(),
]);
if ($menuItem === null) {
$menuItem = new MenuItem;
$menuItem->setName($orderItem->getName());
$menuItem->setFoodVendor($orderItem->getFoodOrder()->getFoodVendor());
$eventArgs->getObjectManager()
->persist($menuItem);
}
$orderItem->setMenuItem($menuItem);
}
}