我不确定标题,但我会尽力解释我的问题。我有一个小网站来管理学期、班级、学生、出勤率等。用Symfony 2.3和Doctrine 2构建。
学生注册了一些课程,我在学生实体中这样保存:
/**
* @ORMManyToMany(targetEntity="Course", inversedBy="students")
*/
private $courses;
网站的工作原理是这样的:你选择一个学期,然后网站将只显示与本学期相关的信息(即时间表、本学期课程的课堂报告等)。我将所选学期保留在课程中。
因此,这意味着,当你想编辑学生档案,让她/他参加某些课程时,选择者只显示所选学期的课程(基本上是当前学期),因为否则你会有太多的选择,而且这些选择是不准确的。
我在StudentType表单中生成这样的选择:
->add('courses', 'entity', array(
'class' => 'VirguleMainBundle:Course',
'query_builder' => $this->doctrine->getRepository('VirguleMainBundle:Course')->getCoursesForSemesterQB($this->semesterId),
'expanded' => false,
'multiple' => true,
'required' => false,
'attr' => array('class' => 'medium-select')
));
但当我提交表格时,课程集当然会被清空,然后填写表格中选定的选项。这意味着前几个学期的学生入学人数会丢失。
我曾尝试使用FormEvent手动放回以前保存的值,如下所示:
public function preSubmit(FormEvent $event) {
$data = $event->getData();
$form = $event->getForm();
$currentCourses = $form->getData()->getCourses();
foreach ($currentCourses as $course) {
if ($course->getSemester()->getId() != $this->semesterId) {
$data['courses'][] = $course;
}
}
$event->setData($data);
$this->customizeForm($form, false);
}
但后来我得到了一个"This value is invalid"错误,我想因为我添加的数据不是原始形式,所以这是有意义的。
因此,我想知道如何基本上显示类#20、#21和#22(链接到我们目前正在处理的第2学期),同时保留已经保存的值#10、#11和#12(因为它们链接到第1学期)。或者,如果有另一种解决方案可以实现这一点,如果我的设计完全失败了。
我希望这是有意义的,有人会帮助我,因为我被卡住了:)
解决方案很简单:我颠倒了的关系