我刚刚开发了一个控制器,其中包括创建一个主题,添加一个或多个问题的能力。 它的工作原理,但我不是很满意我的代码的质量:Symfony - 获得最后一个id与教条
事实上,当我想创建一个新的主题,我无法检索我的表问题在phpmyadmin的最后一个ID。 (我目前有两张表:SUBJECT,问题)
唯一的解决方案,我发现,它是非常丑陋的,是创建主题,并创建一个记录在我的QUESTION表最终检索最后一个ID通过getid()通过autoincrementation删除并删除相同的问题显示用于添加问题的表单。
你们有没有更好的解决方案? :(
预先感谢您为您的回报,
我的代码:
/**
* @Route("/add_sujet", name="add_sujet")
* @Method({"GET", "POST"})
*/
public function add_sujetAction(Request $request)
{
$sujet = new Sujet();
$form = $this->createForm(SujetType::class, $sujet)
->add('saveAndNext', SubmitType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$sujet->setSlug($this->get('slugger')->slugify($sujet->getTitle()));
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($sujet);
$entityManager->flush();
$this->addFlash('success', 'sujet.created_successfully');
if ($form->get('saveAndNext')->isClicked()) {
// On commence à créer les questions.
$question = new question();
$question->setContent('init');
$question->setType('init');
$question->setSujet($sujet);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($question);
$entityManager->flush(); // Add factice question<br>
$id = $question->getId()+1; // NOT OPTIMIZED.. <br>
$entityManager->remove($question);
<br>
$entityManager->flush(); // JE SAIS C'EST TRES MOCHE.. <br>
return $this->redirectToRoute('add_question', ['sujetSlug' => $sujet->getSlug(), 'id' => $id]);
}
// On annule la création de sujet.
return $this->redirectToRoute('sujet');
}
// On présente le formulaire pour déclaration sujet.
return $this->render('default/add_sujet.html.twig', [
'sujet' => $sujet,
'form' => $form->createView(),
]);
}
第一步是在自定义仓库中寻找*自定义方法*类似于'public function findLastQuestion()'然后您可以使用单元测试来测试它,你需要....你可以使用queryBuilder,如果你喜欢更简单的结构....和remov您的解决方法。 – Confidence
感谢你的回应。让我试试这个! :) –
如果另一个用户在您的应用等待第一位用户的响应时创建问题会发生什么情况。应该不需要下一个可用的问题ID。特别是如果你使用Doctrine实体管理器。 – Cerad