在另一个实体的表单中包含其他信息的最佳做法是什么?
我有学生实体,小组实体, StudentsGroup 和出勤实体。
id
,code
和name
。id
和name
。id
,group_id
和student_id
。id
,students_group_id
,date
和status
。 群组可以有多个学生,其保存在 StudentsGroup 中。为什么我要 StudentsGroup ?因为实际上1 组可以有一些 子组 ,例如 SubjectsGroup 等。< strong>出勤通过 StudentsGroup ID 保存学生信息,同一个学生可以有不同的students_group_id
。
现在,问题是:如何以收集形式出示学生信息? 所有实体关系都声明为对象,因此实际上我们可以从任何实体自由访问em。但我不知道如何以形式做到这一点。我的表格在这里:
<?php
/* Collection Form */
$tanggal = new \DateTime($request->request->get('sifo_adminbundle_studentsgrouping')['tanggal']);
$attendances = new StudentsGrouping();
foreach ($entities as $temp) {
$entity = new Attendance();
$entity = $em->getRepository('SifoAdminBundle:Attendance')->findOneBy(array('studentsGrouping' => $temp, 'date' => $tanggal));
if ($entity){
$attendances->getAttendances()->add($entity);
}
}
$form = $this->createCollectionForm($attendances, $id, $tanggal);
return $this->render('SifoAdminBundle:DftAbsensi:manage.html.twig', array(
'form' => $form->createView(),
));
这就是我在树枝上渲染的方式:
{{ form_start(form_collection) }}
{{ form_row(form_collection.tanggal) }}
{% for attendance in form_collection.attendances %}
{{ form_row(attendance.status) }}
{% endfor %}
{{ form_end(form_collection) }}
我正在考虑创建实体并将其传递到以下形式:
foreach ($entities as $temp) {
$entity = new Student();
$entity = $em->getRepository('SifoAdminBundle:Student')->find($temp->getId());
if ($entity){
$entities[i] = $entity;
}
$i++
}
然后在树枝上显示它是这样的:
{{ form_start(form_collection) }}
{{ form_row(form_collection.tanggal) }}
{% for key, attendance in form_collection.attendances %}
{{ entities[key].code }}
{{ entities[key].name }}
{{ form_row(attendance.status) }}
{% endfor %}
{{ form_end(form_collection) }}
但我觉得这不舒服。我真的需要创建新的实体,只是为了显示学生实体的名称和代码吗?有这样做的最佳做法吗?
答案 0 :(得分:1)
您可以使用实体字段。
$builder->add('users', 'entity', array(
'class' => 'AcmeHelloBundle:User',
'multiple' => true, /* you can choose more than one */
'mapped' => false, /* if you are using the form with an entity */
'query_builder' => function(EntityRepository $er) {
/* use query builder to get correct results */
return $er->createQueryBuilder('u')->orderBy('u.username', 'ASC');
},
));
上面有两个重要的关键。
'multiple' => true
-----您可以选择多个
'mapped' => false
-----如果您使用带有实体的表单,您的表单将自动查找这些实体之间的连接,如果找不到,则抛出异常。要避免此问题,您应将此选项设置为false
http://symfony.com/doc/current/reference/forms/types/entity.html