Php Symfony 3-EntityType-呈现数据库值
我在Symfony 3的formType中使用EntityType。 当我以新的形式显示它时,一切都很好,choicetype列表包含我数据库中的所有值。 但当我从数据库加载现有数据时,选项列表不会从数据库加载值,而是显示placeholer。 我已签入数据库,值已保存。 我的表格是这样的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',
->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时,实体不必通过关系进行内在链接。