genemu_jqueryselect2_entity的选定属性未存储到数据库中

时间:2013-12-12 11:38:46

标签: symfony-forms jquery-select2 sonata-admin symfony-2.3

我正在将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属性映射字段? 我该如何调试?

任何帮助都会得到满足!

4 个答案:

答案 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'))