suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie kann ich dieses Problem beheben „Symfony 5.4: Zu wenige Parameter: Die Abfrage hat 2 Parameter definiert, aber Sie haben nur 1 gebunden“?

<p>Ich möchte alle Stagiaires laden, die in Bordereaus bezahlt werden sollen. Ich möchte nur die Praktika auswählen, die innerhalb des Datumsintervalls endeten, indem ich die Datumsintervalle auswähle und die Attribute des Praktikanten durch sie hindurchgebe. </p><p> „Interns“ und „Payment“ stehen in keinem Zusammenhang, es gibt jedoch eine Tabelle „Interns_Payment“ (Bordereau_stagiaire), die auf beide Tabellen verweist. Ich möchte dies über ein Repository tun und es dann in den Edit meines PaymentControllers laden. Ich bin neu bei Symfnony</p> <p>Ich habe diese Abfrage in meinem Payment(Bordereau)Repository geschrieben</p> <pre class="brush:php;toolbar:false;"> öffentliche Funktion 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)') ->andWhere('st.isDeleted = IN(:delete)') ->setParameter('delete', false) ->setParameter('dateFin', $bordereau->dateFin) ->setParameter('dateDebut', $bordereau->dateDebut) ->getQuery() ->getResult() ; } </pre> <p>Dies ist die Zahlungsbearbeitungsfunktion (Bordereau) in meinem Controller</p> <pre class="brush:php;toolbar:false;"> #[Route('/{id}/edit', Name: 'app_bordereau_edit', Methoden: ['GET', 'POST'])] öffentliche Funktion edit(Request $request, Bordereau $bordereau, BordereauRepository $bordereauRepo): Antwort { $formBordereau = $this->createForm(BordereauEditType::class, $bordereau); $formBordereau->handleRequest($request); if ($formBordereau->isSubmitted() && $formBordereau->isValid()) { $bordereauRepo->save($bordereau, true); dd($bordereau); return $this->redirectToRoute('app_bordereau_index', [], Response::HTTP_SEE_OTHER); } return $this->renderForm('bordereau/edit.html.twig', [ 'bordereau' => $bordereau, 'form' => $formBordereau, ]); } </pre> <p>Ich hatte gehofft, das Ergebnis durch Überprüfen von <code>dd($bordereauRepository);</code> zu erhalten, aber stattdessen erhalte ich dieses Ergebnis. </p> <p>Ich habe nach ähnlichen Problemen im Zusammenhang mit „Zu wenige Parameter in der Abfrage“ gesucht, konnte jedoch keine Lösung finden. </p> <p><strong>Bearbeiten</strong></p> <p>Ich habe setParamaters für dateDebut und dateFin hinzugefügt. Aber ich kann nicht darauf zugreifen.</p> <p>Soll ich eine benutzerdefinierte Bordereau-Form erstellen? </p> <p><strong>Bearbeiten 2</strong></p> <p>Dies ist meine neue DQL-Funktion</p> <pre class="brush:php;toolbar:false;">public function findByDate(BordereauEditModel $bordereau, bool $isDeleted = false){ $query = $this->createQueryBuilder('bo'); $query ->select('bo', 'bord_stag', 'st') ->leftJoin('bo.bordereauStagiaire', 'bord_stag') ->leftJoin('bord_stag.stagiaire', 'st') ->andWhere('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')); } $query ->getQuery() ->getResult() ; } </pre> <p>Die Ergebnisse werden mit den von mir festgelegten statischen Parametern gedruckt. Aber nicht für dynamische.</p> <p>Ich habe außerdem ein Modell <code>BordereauEditModel</code> und ein benutzerdefiniertes Formular</p> erstellt. <p>Dies ist meine <code>edit</code>-Funktion</p> <pre class="brush:php;toolbar:false;"> #[Route('/{id}/edit', Name: 'app_bordereau_edit', Methoden: ['GET', 'POST'])] öffentliche Funktion edit(Request $request, Bordereau $bordereau, BordereauRepository $bordereauRepository, BordereauEditModel $bordereauEdit): Antwort { $bordereauEdit = new BordereauEditModel(); $formBordereau = $this->createForm(BordereauEditType::class, $bordereauEdit); $formBordereau->handleRequest($request); if ($formBordereau->isSubmitted() && $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, 'form' => $formBordereau, ]); } </pre> <p>Wenn ich versuche, dynamische Elemente zu laden, erscheint die Meldung „Member-Funktionsformat() bei Null aufgerufen“. Ich weiß nicht, ob das eine andere Frage ist und ich sollte sie von hier entfernen (d. h. als Absatz im Hauptbeitrag, damit die Leute nicht verwirrt werden) </p> <p>Member-Funktion format() auf Null aufrufen ->
P粉715304239P粉715304239475 Tage vor696

Antworte allen(1)Ich werde antworten

  • P粉394812277

    P粉3948122772023-09-03 10:09:17

    从条件中删除IN。如果要使用IN进行检查,则不能使用比较运算符。

    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()
        ;
    }
    

    Antwort
    0
  • StornierenAntwort