我正在将genemu_jqueryselect2_entity用于表格中的多选字段(位于Sonata管理类中),用于所谓的Uni(大学)实体:
->add('courses', 'genemu_jqueryselect2_entity',array('multiple' => true, 'class' => 'PROJECT\UniBundle\Entity\Course'))
但所选条目未填入我的实体。使用firebug我能够检测到,课程的ID通过POST正确传递。
可能该字段未正确映射到Uni实体,但我不知道为什么。
这是我的Uni实体的添加方法,甚至不会被调用:
public function addCourse(\PROJECT\UniBundle\Entity\Course $courses)
{
$this->courses[] = $courses;
return $this;
}
如何使用Uni的courses属性映射字段? 我该如何调试?
任何帮助都会得到满足!
答案 0 :(得分:1)
尝试编写这样的方法:
public function addCourse(\PROJECT\UniBundle\Entity\Course $course)
{
$this->courses[] = $course;
$course->setUniversity($this); // Or similar.
return $this;
}
否则,在DB中的课程行上未设置外键。
答案 1 :(得分:0)
尝试创建方法setCourses
public function setCourses(\Doctrine\Common\Collections\Collection $courses)
{
$this->courses = $courses;
...
答案 2 :(得分:0)
我不知道为什么,但是没有调用addCourse方法。
无论如何,Tautrimas Pajarskas的答案对我有用,所以我给了一个upvote。
外键关系是我的代码中必不可少的部分。
我在大学奏鸣曲管理员中实现了这样:
private function addUniToCourses ($university) {
foreach($university->getCourses() as $course) {
if(!$course->getUniversities()->contains($university)) {
$course->addUniversity($university);
}
}
}
public function prePersist($university) {
$this->addUniToCourses($university);
}
public function preUpdate($university) {
$this->addUniToCourses($university);
}
这是解决我问题的方法。
答案 3 :(得分:0)
前一段时间我遇到了同样的问题:Symfony2, $form->bind() not calling adder methods of entity
<强>解决方案强>:
对于要调用的加法器(addCourse()),您必须禁用该字段的by_reference
选项:
->add('courses', 'genemu_jqueryselect2_entity',
array(
'by_reference' => false, // This line should do the trick
'multiple' => true,
'class' => 'PROJECT\UniBundle\Entity\Course'))