diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 4d19aab..1e9de67 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -12,49 +12,26 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -use function assert; - final class MenuItemType extends AbstractType { #[Override] public function buildForm(FormBuilderInterface $builder, array $options): void { - $item = $options['data']; - assert($item instanceof MenuItem); // Ensure it's of the correct type - $vendorId = $item->getFoodVendor()?->getId(); // Use safe navigation operator in case FoodVendor is null - - $builder->add('name'); // Basic field - $builder->add('aliases', EntityType::class, [ - 'class' => MenuItem::class, - 'choice_label' => 'name', - 'multiple' => true, - 'expanded' => true, - 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { - $qb = $repository->createQueryBuilder('m'); - - // Build the main query with a NOT EXISTS constraint - $qb + $vendor = $options['data']->getFoodVendor(); + $vendorId = $vendor->getId(); + $builder + ->add('name') + ->add('aliasOf', EntityType::class, [ + 'class' => MenuItem::class, + 'choice_label' => 'name', + 'query_builder' => static fn(MenuItemRepository $repository): QueryBuilder => $repository + ->createQueryBuilder('m') ->where('m.foodVendor = :vendorId') ->andWhere('m.deletedAt IS NULL') - ->andWhere('m.id != :id') - ->andWhere( - $qb->expr() - ->notIn( - 'm.id', - $repository->createQueryBuilder('m2') - ->select('m2.id') - ->where('m2.aliasOf != m.id') // Reference m.id in the inner query - ->orWhere('m2.aliasOf IS NOT NULL') - ->getDQL() // The subquery's DQL string - ) - ) ->orderBy('m.name', 'ASC') - ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type - ->setParameter('id', $item->getId(), UlidType::NAME); // ULID or appropriate type - - return $qb; - }, - ]); + ->setParameter(':vendorId', $vendorId, UlidType::NAME), + ]) + ; } #[Override]