【发布时间】:2018-08-22 16:36:06
【问题描述】:
我有一个下一个表格:quiz、question 和 question_quiz。我有一个多对多的关系。 插入适用于表格测验和问题,但在表格 question_quiz 中只插入了一条记录。
我的桌子
“问题”,没关系。
+----+--------+
| id | title |
+----+--------+
| 61 | Title1 |
| 62 | Title2 |
| 63 | Title3 |
+----+--------+
“测验”,没关系。
+----+-------+--------+
| id | name | status |
+----+-------+--------+
| 27 | Name1 | 0 |
+----+-------+--------+
“问题测验”
+-------------+---------+
| question_id | quiz_id |
+-------------+---------+
| 61 | 27 |
+-------------+---------+
最后一张表必须插入61,62,63 quiestion_id,但只插入单条记录。
我的控制器的片段。
$quiz = new Quiz();
$question = new Question();
$form = $this->get('form.factory')->createNamed('quiz', QuizType::class, $quiz);
$quiz->getQuestions()->add($question);
$question->addQuiz($quiz);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($quiz);
$em->persist($question);
$em->flush();
}
问题实体的调用证据。
$quiz->getQuestions()->add($question);
$question->addQuiz($quiz);
我使用集合类型,我可以插入任意数量的问题。
更新 QuizType 表单。
class QuizType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, array('attr' => ['class' => 'form-control name-quiz'], 'label' => 'Name Quiz'))
->add('status', CheckboxType::class, array(
'label' => 'Status Quiz',
'required' => false))
->add('save', SubmitType::class, ['label' => 'Add', 'attr' => ['class' => 'btn btn-primary']]);
$builder
->add('questions', CollectionType::class, array(
'entry_type' => QuestionType::class,
'entry_options' => array('label' => false),
'allow_add' => true,
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Quiz::class
]);
}
}
如果我调试 addQuestion() 方法,我收到错误 INSERT INTO question (title) VALUES (?)' with params [null]。但是如果我调试方法 addQuiz 我得到 p>
Question {#583 ▼
-id: null
-title: "123"
-quiz: ArrayCollection {#584 ▼
-elements: array:1 [▼
0 => Quiz {#581 ▼
-id: null
-name: "123"
-questions: ArrayCollection {#580 ▶}
-status: false
}
]
}
-answers: ArrayCollection {#585 ▶}
}
调试 $form->get('questions')->getData() 返回
ArrayCollection {#733 ▼
-elements: array:2 [▼
0 => Question {#736 ▶}
1 => Question {#981 ▶}
]
}
【问题讨论】:
-
请出示您的
QuizType好吗?从提交的数据到您的Quiz实体的映射看起来不像您预期的那样工作。 -
@xabbuhI 我更新了。
-
哦,您能否也显示您的
Quiz和Question实体? -
@xabbuh,请看这里。 stackoverflow.com/questions/51954652/…
-
我想知道
$this->questions[] = $question;是否被调用过,是否真的有效。$this->questions在您的Quiz实体中是一个 Doctrine 集合。所以我本来希望这条线是$this->questions->add($question);。
标签: symfony doctrine-orm insert many-to-many junction-table