35 lines
1.2 KiB
PHP
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);
|
|
}
|
|
}
|