Sonata admin get existing query builder

240 Views Asked by At

please help to find out the following:

I have the following code:

/**
 * @param FormMapper $formMapper
 */
public function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('sitter', EntityType::class, [
            'class'         => User::class,
            'query_builder' => function (EntityRepository $entityRepository) {
                return $entityRepository->createQueryBuilder('u')
                    ->andWhere('u.roles like :role')
                    ->setParameter('role', '%' . 'ROLE_STAFF' . '%');
            }
        ], ['admin_code' => 'admin.user'])
    ;

The problem is that my custom query bulder replaces already defined value in my form, so every time I need to select from scratch already defined value from the dropdown. For example if I remove query_builder option, then I will get the whole list of users, but I need only staff users. How can I use existing query bulder instead of creating the new one?

1

There are 1 best solutions below

0
Deadpool On

I found the solution. The I had to add choice_value attribute:

->add('sitter', EntityType::class, [
            'class'         => User::class,
            'choice_value' => 'fullName',
            'query_builder' => function (EntityRepository $entityRepository) {
                return $entityRepository->createQueryBuilder('u')
                    ->andWhere('u.roles like :role')
                    ->setParameter('role', '%' . 'ROLE_STAFF' . '%');
            }
        ], ['admin_code' => 'admin.user'])

fullName is a method inside of User entity