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


Generate form from queried collection of entities

使用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();

操作类型 :

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
    ));
}

这个答案完全符合我的需求,但我无法让它工作。生成的表单太大了:它占用了整个响应表...你知道为什么吗?

如果你只依靠教义懒惰加载,它会加载所有相关实体,这样既好又坏。

要过滤用户的响应,请使用 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();

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