使用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完全符合我的要求,但我无法让它发挥作用。生成的表单太大了:它需要整个响应表...你有什么线索的原因吗?
答案 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();
如上所述,专门选择想要水合的实体可以避免所有可用数据的延迟加载。