Symfony 3.3 EntityType, используя различные значения в раскрывающемся списке - PullRequest
1 голос
/ 05 июля 2019

Я работаю над существующим проектом Symfony 3.3, и меня попросили зарегистрировать раскрывающееся поле в форме фильтра результатов, которое должно содержать все значения из поля в базе данных.

До сих пор я работал следующим образом:


$builder->add(
    'newField',
    EntityType::class,
    [
        'class'        => Transaction::class,
        'required'     => false,
        'multiple'     => false,
        'label'        => 'New Field',
        'choice_label' => 'newField',
        'placeholder'  => 'Choose a value'
    ]
)

Приведенный выше код способен правильно отображать значения, но, к сожалению, поскольку в таблице многократно совпадают значения, я получаю длинный список всех одинаковых значений.

Вместо этого мне нужно отобразить значения DISTINCT из базы данных.

Я пробовал query_builder, но, честно говоря, я не уверен, что я правильно его использую, так как я не опытный разработчик Symfony.

Есть идеи, как отобразить записи данного столбца с DISTINCT результатами?

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Как вы сказали сами, вы можете использовать построитель запросов для достижения этой цели.Что-то такое простое, как это, должно достичь того, что вы хотите:

->add('fooBar', EntityType::class, [
    'query_builder' => function (EntityRepository $repository) {
        return $repository
            ->createQueryBuilder('f')
            ->distinct();
    },
]);

Вы также можете указать флаг, который будет отличаться, и помните, что не нужно возвращать результат, а возвращать запрос.Вы можете прочитать больше здесь

1 голос
/ 05 июля 2019

Вы правы,

Query_builder - это путь.

Итак, сначала создайте метод того, что вы хотите сделать в TransactionRepository .

class TransactionRepository extends EntityRepository
{
    //....
    public function getDistinctValues()
    {
        //Return what you want to get, I cannot write this for you without your entity
    }
}

Затем используйте его в FormType :

$builder->add(
    'newField',
    EntityType::class,
    [
        'class'        => Transaction::class,
        'required'     => false,
        'multiple'     => false,
        'label'        => 'New Field',
        'choice_label' => 'newField',
        'placeholder'  => 'Choose a value',
        'query_builder' => function(TransactionRepository $repository) {
                    return $repository->getDistinctValues();
                }
    ]
)

И вы должны хорошо идти.

...