Comment puis-je résoudre ce problème « Symfony 5.4 : Trop peu de paramètres : la requête a défini 2 paramètres mais vous n'en avez limité qu'un » ?
P粉715304239
P粉715304239 2023-09-02 12:53:54
0
1
570

Je souhaite charger tous les Stagiaires à payer en Bordereaus. Je souhaite sélectionner uniquement les stages qui se sont terminés dans l'intervalle de dates en sélectionnant les intervalles de dates et en leur transmettant les attributs du stagiaire.

"Stagiaires" et "Paiement" ne sont pas liés, mais il existe une table "Interns_Payment" (Bordereau_stagiaire) qui renvoie aux deux tables. Je souhaite le faire via un référentiel, puis le charger dans l'édition de mon PaymentController. Je suis nouveau sur symfnony

J'ai écrit cette requête dans mon référentiel de paiement (Bordereau)

 fonction publique findByDate(Bordereau $bordereau){ $query = $this->createQueryBuilder('bo'); return $query->select('bo', 'bord_stag', 'st') ->leftJoin('bo.bordereauStagiaire', 'bord_stag') ->leftJoin('bord_stag.stagiaire', 'st') ->andWhere('st.finStage >= IN(:dateDebut)') ->andWhere('st.finStage <= IN(:dateFin)') ->etOù('st.isDeleted = IN(:delete)') ->setParameter('supprimer', faux) ->setParameter('dateFin', $bordereau->dateFin) ->setParameter('dateDebut', $bordereau->dateDebut) ->getQuery() ->getResult() ; } ≪/pré> 

Il s'agit de la fonction d'édition du paiement (Bordereau) dans mon contrôleur

 #[Route('/{id}/edit', nom : 'app_bordereau_edit', méthodes : ['GET', 'POST'])] public function edit(Request $request, Bordereau $bordereau, BordereauRepository $bordereauRepo) : Réponse { $formBordereau = $this->createForm(BordereauEditType::class, $bordereau); $formBordereau->handleRequest($request); if ($formBordereau->isSubowned() && $formBordereau->isValid()) { $bordereauRepo->save($bordereau, true); jj($bordereau); return $this->redirectToRoute('app_bordereau_index', [], Response::HTTP_SEE_OTHER); } return $this->renderForm('bordereau/edit.html.twig', [ 'bordereau' => $bordereau, 'formulaire' => $formBordereau, ]); } ≪/pré> 

J'espérais obtenir le résultat en vérifiant dd($bordereauRepository); mais j'obtiens ce résultat.

J'ai recherché des problèmes similaires concernant "Trop peu de paramètres dans la requête", mais je n'ai pas réussi à trouver de solution.

Modifier

J'ai ajouté setParamaters pour dateDebut et dateFin. Mais je ne peux pas y accéder.

Dois-je créer un bordereau personnalisé ?

Modifier 2

Voici ma nouvelle fonction DQL

fonction publique findByDate(BordereauEditModel $bordereau, bool $isDeleted = false){ $query = $this->createQueryBuilder('bo'); $requête ->select('bo', 'bord_stag', 'st') ->leftJoin('bo.bordereauStagiaire', 'bord_stag') ->leftJoin('bord_stag.stagiaire', 'st') ->etOù('st.isDeleted = :delete') ->setParameter('delete', $isDeleted); if ($bordereau->dateDebut) { $query->andWhere('st.finStage <= :dateDebut') ->setParameter('dateDebut', $bordereau->dateDebut->format('Y-m-d')); } if ($bordereau->dateFin) { $query->andWhere('st.finStage <= :dateFin') ->setParameter('dateFin', $bordereau->dateFin->format('Y-m-d')); } $requête ->getQuery() ->getResult() ; } ≪/pré> 

Il imprime les résultats en utilisant les paramètres statiques que j'ai définis. Mais pas pour les dynamiques.

J'ai également créé un modèle BordereauEditModel et un formulaire personnalisé

Voici ma fonction edit

 #[Route('/{id}/edit', nom : 'app_bordereau_edit', méthodes : ['GET', 'POST'])] public function edit(Request $request, Bordereau $bordereau, BordereauRepository $bordereauRepository, BordereauEditModel $bordereauEdit) : Réponse { $bordereauEdit = new BordereauEditModel(); $formBordereau = $this->createForm(BordereauEditType::class, $bordereauEdit); $formBordereau->handleRequest($request); if ($formBordereau->isSubowned() && $formBordereau->isValid()) { $bordereauRepository->findByDate($bordereauEdit); $bordereauRepository->save($bordereau, true); dd($bordereauRepository); return $this->redirectToRoute('app_bordereau_index', [], Response::HTTP_SEE_OTHER); } return $this->renderForm('bordereau/edit.html.twig', [ 'bordereau' => $bordereau, 'formulaire' => $formBordereau, ]); } ≪/pré> 

Lorsque j'essaie de charger une dynamique, il est indiqué "Format de fonction membre () appelé sur null". Je ne sais pas si c'est une autre question et je devrais la supprimer d'ici (c'est-à-dire sous forme de paragraphe dans le message principal pour que les gens ne soient pas confus)

Appeler le format de fonction membre() sur null -> Résolu

P粉715304239
P粉715304239

répondre à tous (1)
P粉394812277

SupprimezIN。如果要使用INde la condition à vérifier, vous ne pouvez pas utiliser d'opérateurs de comparaison.

public function findByDate(Bordereau $bordereau){ $query = $this->createQueryBuilder('bo'); return $query->select('bo', 'bord_stag', 'st') ->leftJoin('bo.bordereauStagiaire', 'bord_stag') ->leftJoin('bord_stag.stagiaire', 'st') ->andWhere('st.finStage >= :dateDebut') ->andWhere('st.finStage <= :dateFin') ->andWhere('st.isDeleted = :delete') ->setParameter('delete', false) ->setParameter('dateFin', $bordereau->dateFin) ->setParameter('dateDebut', $bordereau->dateDebut) ->getQuery() ->getResult() ; }
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!