从查询的实体集合生成表单

时间:2016-03-20 19:44:19

标签: php forms symfony

使用symfony 2.6和twig:我的数据库中有很多用户提供的答案。我想为一个给定的用户创建一个表格,以便让他们编辑它们。

我使用以下代码获得这些回复:

控制器:

$responses = $this->getDoctrine()->getRepository('AppBundle:Response')
->findBy(
    array('user' => $usr,
        'response' => 1,
        'response' => 2
    ),
    array('id' => 'ASC')
);

$form = $this->createForm(new ActionType, $responses)->createView();

ActionType:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('check', 'entity', array(
            'required' => false,
            'class' => 'AppBundle:Response',
            'property'      => 'id',
            'property_path' => '[id]',
            'multiple'      => true,
            'expanded'      => true,
        ))
    ;
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => null,
        'csrf_protection' => false
    ));
}

This answer完全符合我的要求,但我无法让它发挥作用。生成的表单太大了:它需要整个响应表...你有什么线索的原因吗?

1 个答案:

答案 0 :(得分:0)

如果您完全依赖于学说延迟加载,它将加载所有您的相关实体,这样做既好又坏。

使用QueryBuilder过滤用户获取数据的响应,如下所示:

$responses = $queryBuilder->select('u', 'r')
                ->from('YourBundle:User', 'u')
                ->join('u.responses', 'r')
                ->where('u.id = :userId')
                ->orderBy('u.id', 'ASC')
                ->setParameter('userId', $yourUserEntity->getId())
                ->getQuery()->getResult();

如上所述,专门选择想要水合的实体可以避免所有可用数据的延迟加载。