Я только что разработал контроллер, который состоит из создания темы с возможностью добавить один или несколько вопросов.
Это работает, но я не очень доволен качеством моего кода:
Действительно, когда я хочу создать новую тему, я не могу получить последний идентификатор моей таблицы QUESTION в phpmyadmin. (У меня на данный момент две таблицы: SUBJECT, QUESTION)
Единственное решение, которое я нашел, и это очень уродливо, — это создать тему и создать запись в моей таблице QUESTION, чтобы, наконец, получить последний идентификатор с помощью getid () с помощью автоинкрементации и удалить этот же вопрос, прежде чем отобразить форму для добавления вопрос.
У кого-нибудь из вас есть лучшее решение? 🙁
Заранее спасибо за ваше возвращение,
Мой код:
/**
* @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(),
]);
}
Просто выберите из вашей таблицы и ЗАКАЗАТЬ ПО ID DESC, и ОГРАНИЧИТЬ до 1 записи Создание новой записи только для того, чтобы получить последний идентификатор вставки — это безумие!
Вам не нужно добавлять новую запись, чтобы получить последний идентификатор.
Вы можете попробовать это:
$lastQuestion = $em->getRepository('AppBundle:Question')->findOneBy([], ['id' => 'desc']);
$lastId = $lastQuestion->getId();
Чтобы получить последний идентификатор после flush
:
$em->persist($question); // Id not avalaible
$em->flush();
$lastId = $question->getId(); // we can now get the Id