ManyToMany关系和Symfony2表单:在表单中显示一些选项,保留已保存但未显示的选项



我不确定标题,但我会尽力解释我的问题。我有一个小网站来管理学期、班级、学生、出勤率等。用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学期)。或者,如果有另一种解决方案可以实现这一点,如果我的设计完全失败了。

我希望这是有意义的,有人会帮助我,因为我被卡住了:)

解决方案很简单:我颠倒了的关系

相关内容

  • 没有找到相关文章

最新更新