Symfony 3.3 EntityType在下拉列表中使用不同的值

时间:2019-07-05 07:01:04

标签: symfony doctrine-orm doctrine

我正在研究一个现有的Symfony 3.3项目,并被要求在结果过滤器表单中注册一个下拉字段,该字段应包含数据库中某个字段的所有值。

直到现在,我所做的是部分起作用的以下内容:

append

上面的代码能够正确显示这些值,但是不幸的是,由于该表反复具有相同的值,所以我得到了一长串所有相同值的列表。

相反,我需要实现的是显示数据库中的def schedule_off(): days_off = input("Please enter your days off:").split(' ') print(days_off) sch_days_off.extend(days_off) print("This is how many days you have off: ") 值。

我已经尝试过使用query_builder,但是老实说我不确定我是否使用正确,因为我不是经验丰富的Symfony开发人员。

关于如何显示带有 $builder->add( 'newField', EntityType::class, [ 'class' => Transaction::class, 'required' => false, 'multiple' => false, 'label' => 'New Field', 'choice_label' => 'newField', 'placeholder' => 'Choose a value' ] ) 结果的给定列条目的任何想法?

2 个答案:

答案 0 :(得分:2)

正如您自己说的那样,您可以使用查询构建器来实现此目的。像这样简单的事情应该可以实现您的追求:

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

您还可以指定一个标志来区分,并记住不要返回结果而是返回查询。您可以阅读更多here

答案 1 :(得分:1)

你是对的

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();
                }
    ]
)

你应该很好。