Mam 3 tabele :
questions (id, name, surname, email, question)
categories(id, name)
question_category(category_id, question_id).
Jak łatwo się domyśleć jest to relacja wiele do wielu.
Chcę zrobić aktualizację "questions". Zrobiłeem sobię kontroler :
public function updateAction($id) { $request = Request::createFromGlobals(); $question = $this->getDoctrine()->getRepository('AdmFormBundle:Question')->find($id); $form = $this->createForm(new QuestionType(), $question ); if($request->getMethod() == 'POST') { $form->bindRequest($request); if($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); $em->persist($question); $em->flush(); $this->get('session')->setFlash('updated', $id); //return $this->redirect($this->generateUrl('question_get')); } } }
Wyświetla on oczywiście formularz z polami (id, name, surname, email, question) oraz pole wielokrotnego wyboru kategorii.
Tutaj mój QuestionType :
class QuestionType extends AbstractType { { $builder ->add('categories', 'entity', 'class' => 'AdmFormBundle:Category', 'multiple' => true, 'query_builder' => function($er) { return $er->createQueryBuilder('c') ->orderBy('c.id', 'ASC'); } )); } public function getName() { return 'questionForm'; } }
Jak widzicie, do kontrolera dodałem 2 linjki kodu :
oraz
Pierwsza wyświetla ilośc kategorii przed wysłaniem formularza, druga wyświetla ilość kategorii po wysłaniu formularza.
To działa prawidło. Wchodzę sobię w edycję "question" która jest przyporządkowana do jednej kategorii i wyświetla się "przed1".
Zaznaczam jeszcze jedną kategorię (czyli w swoim polu wielokrotnego wyboru mam już zaznaczone dwie opcje) kilkam submit i pod linijką "przed1" wyświetla się "po2".
Jednak W bazie danych nic się nie zmienia, zapytanie update wykonuję się tylko do tabeli questions. Do tabeli question_category nic się nie dodaje.
Moje pytanie : gdzie mam szukać błędu ?
Jakie pliki ewentualnie wam wkleić, by ułatwić wam pomoc dla mnie ?
