简体   繁体   English

Sonata 管理员获取现有的查询生成器

[英]Sonata admin get existing query builder

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.问题是我的自定义查询 bulder 替换了我的表单中已经定义的值,所以每次我需要从下拉列表中从头开始选择已经定义的值。 For example if I remove query_builder option, then I will get the whole list of users, but I need only staff users.例如,如果我删除query_builder选项,那么我将获得整个用户列表,但我只需要员工用户。 How can I use existing query bulder instead of creating the new one?如何使用现有的查询 bulder 而不是创建新的?

I found the solution.我找到了解决方案。 The I had to add choice_value attribute:我必须添加choice_value属性:

->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 fullName是 User 实体内部的一个方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM