Bonjour à tous,
J'ai une erreur "The identifier id is missing for a query of App\\Entity\\Homepage\" lorsque je déploie sur Heroku...
Cela est d'autant plus bizarre que je n'ai aucune erreur en mode dev...
Au début je croyais que cela venait d'un mauvais usage de la méthode find() dans le controller HomepageController je l'ai donc changé pour "findOneBy() et getSingleResult dans le repository, rien n'y fait, Heroku continue à ne pas l'accepter ...
Contexte: le controller est sensé gérer l'enregistrement unique des données raison pour laquelle j'utilise une méthode getMaxId() dans le repository...
Si il existe une meilleure méthode pour restreindre la table a un seul enregistrement sans passer par mon bricolage je suis preneur... Merci d'avance
HomepageController :
Fonction dans le HomepageRepository :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 <?php namespace App\Controller\Admin; use App\Entity\Homepage; use App\Form\HomepageFormType; use App\Repository\HomepageRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class HomepageController extends AbstractController { #[Route('/admin/homepage/', name: 'fiche_homepage')] public function fiche(EntityManagerInterface $em, Request $request, HomepageRepository $homepageRepository): Response { //Recherche du nombre d'enregistrements pour limiter la sauvegarde à celui existant $rowCount = $homepageRepository->count([]); if ($rowCount === 0) { $homepage = new Homepage; $form = $this->createForm(HomepageFormType::class); $this->addFlash('success', "Les données de la page d'accueil (homepage) ont bien été prises en compte dans la base."); } else { //Recherche de l'id de la page d'accueil (homepage) déjà enregistrée $idHomepage = $homepageRepository->getMaxId(); $homepage = $homepageRepository->findOneBy(['id'=>$idHomepage]); $form = $this->createForm(HomepageFormType::class,$homepage); $this->addFlash('success', 'Vos modifications ont bien été prises en compte dans la base.'); } $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $directory = $this->getParameter('images_directory') . '/logo/'; //Efface les fichiers images qui existeraient déjà // $files = scandir($directory); // $countFiles = count($files); // if ($countFiles > 0) { // foreach ($files as $imgFile) { // if ($imgFile != "." && $imgFile != "..") { // unlink($imgFile); // } // } // } //Traitement du fichier attachment du logo $logoFile = $form['logo']->getData(); if ($logoFile) { $extension = $logoFile->guessExtension(); if (!$extension) { // l'extension n'est pas reconnue $extension = 'bin'; } $logoFilename = md5(uniqid()) . '.' . $extension; $logoFile->move($directory, $logoFilename); $homepage->setLogo($logoFilename); } $em->persist($homepage); $em->flush(); } return $this->render('/admin/homepage/formHomepage.html.twig', [ 'form' => $form->createView(), ]); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public function getMaxId() { $query = $this->createQueryBuilder('h') ->select('MAX(h.id)'); return $query->getQuery()->getSingleResult(); }
Partager