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
678
<p>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. </p><p> "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</p> <p>J'ai écrit cette requête dans mon référentiel de paiement (Bordereau)</p> <pre class="brush:php;toolbar:false;"> 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é> <p>Il s'agit de la fonction d'édition du paiement (Bordereau) dans mon contrôleur</p> <pre class="brush:php;toolbar:false;"> #[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é> <p>J'espérais obtenir le résultat en vérifiant <code>dd($bordereauRepository);</code> mais j'obtiens ce résultat. </p> <p>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. </p> <p><strong>Modifier</strong></p> <p>J'ai ajouté setParamaters pour dateDebut et dateFin. Mais je ne peux pas y accéder.</p> <p>Dois-je créer un bordereau personnalisé ? </p> <p><strong>Modifier 2</strong></p> <p>Voici ma nouvelle fonction DQL</p> <pre class="brush:php;toolbar:false;">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é> <p>Il imprime les résultats en utilisant les paramètres statiques que j'ai définis. Mais pas pour les dynamiques.</p> <p>J'ai également créé un modèle <code>BordereauEditModel</code> et un formulaire personnalisé</p> <p>Voici ma fonction <code>edit</code> <pre class="brush:php;toolbar:false;"> #[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é> <p>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) </p> <p>Appeler le format de fonction membre() sur null -> Résolu</p>
P粉715304239
P粉715304239

répondre à tous(1)
P粉394812277

Supprimez IN。如果要使用IN de 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