我剛剛開發了一個控制器,其中包括創建一個主題,添加一個或多個問題的能力。 它的工作原理,但我不是很滿意我的代碼的質量: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