使用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();
如上所述,专门选择要冻结的实体可避免延迟加载所有可用数据。