sort and filter menuitems in aliasof select
This commit is contained in:
parent
3a144c5db3
commit
7b95ed44ee
1 changed files with 26 additions and 32 deletions
|
@ -12,11 +12,8 @@ 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'];
|
||||
|
@ -25,38 +22,35 @@ final class MenuItemType extends AbstractType
|
|||
|
||||
$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');
|
||||
'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
|
||||
->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
|
||||
// Build the main query with a NOT EXISTS constraint
|
||||
$qb
|
||||
->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;
|
||||
},
|
||||
]);
|
||||
return $qb;
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue