Php Symfony 3-EntityType-呈现数据库值

Php Symfony 3-EntityType-呈现数据库值,php,symfony,symfony-3.3,Php,Symfony,Symfony 3.3,我在Symfony 3的formType中使用EntityType。 当我以新的形式显示它时,一切都很好,choicetype列表包含我数据库中的所有值。 但当我从数据库加载现有数据时,选项列表不会从数据库加载值,而是显示placeholer。 我已签入数据库,值已保存。 我的表格是这样的 ->add('tester', EntityType::class, array( 'class' => 'MyBundle:TesterList',

我在Symfony 3的formType中使用EntityType。 当我以新的形式显示它时,一切都很好,choicetype列表包含我数据库中的所有值。 但当我从数据库加载现有数据时,选项列表不会从数据库加载值,而是显示placeholer。 我已签入数据库,值已保存。 我的表格是这样的

->add('tester', EntityType::class, array(
                'class' => 'MyBundle:TesterList',
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('u')
                    ->orderBy('u.name', 'ASC');
                },
                'choice_label' => 'name',
                'choice_value' => 'name',
                'required' => true,
                'placeholder' => 'Select a tester',
                ))
 {{ form_label(formHydraulicTest.testHeader.tester,'Tester' | trans) }}
                    {{ form_widget(formHydraulicTest.testHeader.tester, { value : formHydraulicTest.testHeader.vars.value.tester}) }} 
对于测试,我尝试将EntityType更改为一个列表为2的ChoiceType,它工作得非常好。 我不知道EntityType有什么问题

编辑: 该字段在我的表单中显示如下:

 {{ form_label(formHydraulicTest.testHeader.tester,'Tester' | trans) }}
 {{ form_widget(formHydraulicTest.testHeader.tester) }} 
实体测试列表与其他实体没有任何关系。这只是一张名单

EntityType在我尝试保存TesterList对象时返回一个TesterList对象,因此我在TesterList实体中添加了此函数

public function __toString() {
    return $this->name;
}

这样,我只保存了测试人员的名称,而没有保存到实体的链接。

通用EntityRepository可能不知道通过创建一个命名的QueryBuilder“u”来获取哪些实体。您可能需要实际的TesterList存储库。因此,您的代码将如下所示:

->add('tester', EntityType::class, array(
                'class' => 'MyBundle:TesterList',
                'query_builder' => function (TesterListRepository $er) {
                    return $er->createQueryBuilder('u')
                              ->orderBy('u.name', 'ASC');
                },
                'choice_label' => 'name',
                'choice_value' => 'name',
                'required' => true,
                'placeholder' => 'Select a tester',
                ))

当然,在表单类顶部的use语句中添加TesterListRepository

泛型EntityRepository可能不知道通过创建一个命名的QueryBuilder“u”来获取哪些实体。您可能需要实际的TesterList存储库。因此,您的代码将如下所示:

->add('tester', EntityType::class, array(
                'class' => 'MyBundle:TesterList',
                'query_builder' => function (TesterListRepository $er) {
                    return $er->createQueryBuilder('u')
                              ->orderBy('u.name', 'ASC');
                },
                'choice_label' => 'name',
                'choice_value' => 'name',
                'required' => true,
                'placeholder' => 'Select a tester',
                ))

当然,在表单类顶部的use语句中添加TesterListRepository

我找到了一种方法让它工作,我只是用twig选择默认值。我已经像这样更新了它

->add('tester', EntityType::class, array(
                'class' => 'MyBundle:TesterList',
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('u')
                    ->orderBy('u.name', 'ASC');
                },
                'choice_label' => 'name',
                'choice_value' => 'name',
                'required' => true,
                'placeholder' => 'Select a tester',
                ))
 {{ form_label(formHydraulicTest.testHeader.tester,'Tester' | trans) }}
                    {{ form_widget(formHydraulicTest.testHeader.tester, { value : formHydraulicTest.testHeader.vars.value.tester}) }} 

我不确定这是解决我的问题的最佳方法,但它确实有效;)

我找到了一种方法让它工作,我只是用twig选择默认值。我已经像这样更新了它

->add('tester', EntityType::class, array(
                'class' => 'MyBundle:TesterList',
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('u')
                    ->orderBy('u.name', 'ASC');
                },
                'choice_label' => 'name',
                'choice_value' => 'name',
                'required' => true,
                'placeholder' => 'Select a tester',
                ))
 {{ form_label(formHydraulicTest.testHeader.tester,'Tester' | trans) }}
                    {{ form_widget(formHydraulicTest.testHeader.tester, { value : formHydraulicTest.testHeader.vars.value.tester}) }} 

我不确定这是解决我的问题的最佳方法,但它确实有效;)

请添加一些有关TesterList实体和表单的信息。这段代码没有问题,所以问题一定出在其他地方。请添加一些有关TesterList实体和表单的信息。这段代码没有什么问题,所以问题肯定出在其他地方。它没有改变我的问题。我认为问题可能是TesterList实体没有链接到持有表单的实体?这些实体不必通过关系进行内在链接,就可以在表单中创建querybuilder。这并没有改变我的问题。我认为问题可能是TesterList实体没有链接到持有表单的实体?在表单中创建querybuilder时,实体不必通过关系进行内在链接。