2013-12-12 1 views
1

Я использую genemu_jqueryselect2_entity для множественного выбора поля в форме (находится в классе администратора Sonata) для так называемого Uni (университет) юридического лица:Выбранные атрибуты genemu_jqueryselect2_entity не сохраняются в базе данных

->add('courses', 'genemu_jqueryselect2_entity',array('multiple' => true, 'class' => 'PROJECT\UniBundle\Entity\Course')) 

Но выбранные записи не заполняются в моей сущности. С firebug я смог обнаружить, что идентификаторы курсов прошли правильно через POST.

Возможно, поле неправильно отображено на объект Uni, но я понятия не имею, почему.

Это добавление метод моего Uni сущности, которая даже и не дозвонились:

public function addCourse(\PROJECT\UniBundle\Entity\Course $courses) 
    { 
     $this->courses[] = $courses; 

     return $this; 
    } 

Как я могу получить поле, чтобы быть сопоставлен с атрибутом курсов универа? Как я мог отладить это?

Любая помощь будет подтверждена!

ответ

0

Я не знаю, почему, но метод addCourse не называется.

Во всяком случае, ответ Таутримаса Паярскаса был полезен для меня, поэтому я отдал верх.

Отношение внешнего ключа было необходимой и отсутствующей частью моего кода.

я реализовал его в университетском сонатном администраторе, как это:

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); 
} 

Это было решением моей проблемы.

0

Попытка создать метод setCourses

public function setCourses(\Doctrine\Common\Collections\Collection $courses) 
    { 
     $this->courses = $courses; 
... 
+0

Благодарим вас за ответ, но этот метод также не называется. – enigma

1

Попробуйте писать этот метод так:

public function addCourse(\PROJECT\UniBundle\Entity\Course $course) 
{ 
    $this->courses[] = $course; 
    $course->setUniversity($this); // Or similar. 

    return $this; 
} 

В противном случае внешний ключ не установлен по ходу строки в БД.

+0

Благодарим вас за ответ и подсказку, но метод addCourse даже не вызван. – enigma

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')) 
Смежные вопросы