我正在尝试从实体返回多行到表单。表格和控制器如下。
表格
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ExceptionFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('usrid')
->add('trcode')
->add('cola', NumberType::class,
['scale' => 2])
->add('colb', NumberType::class,
['scale' => 2]
)
->add('colc', NumberType::class,
['scale' => 2])
->add('cold')
->add('fringe', ChoiceType::class,
array(
'choices' => array(
'No' => 0,
'Yes' => 1
)
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\Exception'
]);
}
public function getBlockPrefix()
{
return 'app_bundle_exception_form_type';
}
}
这是我的控制器
public function editExceptions(Request $request, Exception $exception)
{
$form = $this->createForm(ExceptionFormType::class, $exception);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$exceptions = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($exceptions);
$em->flush();
$this->addFlash('success', 'Exception Added');
return $this->redirectToRoute('home');
}
return $this->render('exceptions/edit.html.twig', [
'exceptionForm' => $form->createView()
]);
}
这可以工作并呈现一行的所有信息。有时我会在表单中呈现多行。当我查看调试时,我得到了这个sql。
SELECT
t0.usrid AS usrid_1,
t0.trcode AS trcode_2,
t0.cola AS cola_3,
t0.colb AS colb_4,
t0.colc AS colc_5,
t0.cold AS cold_6,
t0.dept AS dept_7,
t0.fringe AS fringe_8,
t0.seq AS seq_9,
t0.id AS id_10
FROM
exception t0
WHERE
t0.usrid = ?
LIMIT
1
如何删除'LIMIT 1'? 我不确定我正在问正确的问题。我只使用Symfony大约一个月。我已经搜索了谷歌,stackoverflow和Symfony文档,但找不到我要找的内容或者如何确切地询问我在寻找什么。
我会尝试更好地解释自己。
|---------|---------|---------|--------|---------|---------|---------|
| usrid | trcode | cola | colb | colc | cold | fringe |
|---------|---------|---------|--------|---------|---------|---------|
| 25 | A | bill | smith | 2.00 | 4.00 | yes |
|---------|---------|---------|--------|---------|---------|---------|
| 25 | C | bill | smith | 4.34 | 5.00 | yes |
|---------|---------|---------|--------|---------|---------|---------|
| 25 | F | bill | smith | 1.54 | 2.76 | no |
|---------|---------|---------|--------|---------|---------|---------|
| 38 | A | bob | smith | 2.00 | 4.00 | yes |
|---------|---------|---------|--------|---------|---------|---------|
| 56 | L | maggie | smith | 2.00 | 4.00 | yes |
|---------|---------|---------|--------|---------|---------|---------|
| 21 | G | mark | smith | 2.00 | 4.00 | yes |
|---------|---------|---------|--------|---------|---------|---------|
这就是我的表格。在表单上我需要显示前3行,因为它们是相同的usrid。我知道如何显示其他行,因为它很直接。这只使用一个实体。我没有加入或使用任何存储库。
答案 0 :(得分:0)
如果我理解你的问题,你需要每行一个表格(ExceptionFormType),即使他们共享他们的usrid。如果您可以(根据您的评论)拥有5个具有相同usrid的行,这意味着您将需要5个表单,但它们都可以嵌入父表单中。
看起来该实体属于另一个实体,每个usrid只有一行(让我们称之为用户)。
所以基本上,你想要的是创建一个包含ExceptionFormType形式的表单。
看看: https://symfony.com/doc/current/form/form_collections.html