如何将实体中的多行返回到Symfony 3

时间:2017-07-27 18:42:39

标签: forms symfony symfony-forms

我正在尝试从实体返回多行到表单。表格和控制器如下。

表格

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。我知道如何显示其他行,因为它很直接。这只使用一个实体。我没有加入或使用任何存储库。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你需要每行一个表格(ExceptionFormType),即使他们共享他们的usrid。如果您可以(根据您的评论)拥有5个具有相同usrid的行,这意味着您将需要5个表单,但它们都可以嵌入父表单中。

看起来该实体属于另一个实体,每个usrid只有一行(让我们称之为用户)。

所以基本上,你想要的是创建一个包含ExceptionFormType形式的表单。

看看: https://symfony.com/doc/current/form/form_collections.html