찾다

 >  Q&A  >  본문

"Symfony 5.4: 매개 변수가 너무 적습니다. 쿼리에서 매개 변수 2개를 정의했지만 1개만 바인딩했습니다." 문제를 해결하려면 어떻게 해야 합니까?

<p>Bordereaus에서 지급받을 모든 Stagiaires를 로드하고 싶습니다. 날짜 간격을 선택하고 이를 통해 인턴의 속성을 전달하여 해당 날짜 간격 내에 종료된 인턴십만 선택하고 싶습니다. </p><p> "Interns"와 "Payment"는 관련이 없지만 두 테이블을 연결하는 "Interns_Payment"(Bordereau_stagiaire) 테이블이 있습니다. 저장소를 통해 이 작업을 수행한 다음 이를 PaymentController의 편집에 로드하고 싶습니다. 저는 Symfnony를 처음 사용합니다</p> <p>이 쿼리는 Payment(Bordereau)Repository</p>에 작성했습니다. <pre class="brush:php;toolbar:false;"> 공개 함수 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('삭제', false) ->setParameter('dateFin', $bordereau->dateFin) ->setParameter('dateDebut', $bordereau->dateDebut) ->getQuery() ->getResult() ; } </pre> <p>내 컨트롤러의 결제(Bordereau) 편집 기능입니다</p> <pre class="brush:php;toolbar:false;"> #[Route('/{id}/edit', 이름: 'app_bordereau_edit', 메소드: ['GET', 'POST'])] 공개 기능 편집(요청 $request, Bordereau $bordereau, BordereauRepository $bordereauRepo): 응답 { $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, '양식' => $formBordereau, ]); } </pre> <p><code>dd($bordereauRepository);</code>를 확인하여 결과를 얻고 싶었지만 대신 이 결과를 얻었습니다. </p> <p>'검색어에 매개변수가 너무 적음'과 관련된 유사한 문제를 검색했지만 해결 방법을 찾지 못했습니다. </p> <p><strong>수정</strong></p> <p>dateDebut 및 dateFin에 setParamaters를 추가했습니다. 하지만 접근할 수 없습니다.</p> <p>보더로의 사용자 정의 양식을 만들어야 합니까? </p> <p><strong>편집 2</strong></p> <p>이것이 저의 새로운 DQL 함수입니다</p> <pre class="brush:php;toolbar:false;">공개 함수 findByDate(BordereauEditModel $bordereau, bool $isDeleted = false){ $query = $this->createQueryBuilder('bo'); $쿼리 ->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')); } $쿼리 ->getQuery() ->getResult() ; } </pre> <p>내가 설정한 정적 매개변수를 사용하여 결과를 인쇄합니다. 그러나 역동적인 것에는 그렇지 않습니다.</p> <p>또한 <code>BordereauEditType</code>에서 모델 <code>BordereauEditModel</code> <p>이것은 <code>BordereauController</code>에 있는 <code>edit</code> <pre class="brush:php;toolbar:false;"> #[Route('/{id}/edit', name: 'app_bordereau_edit', 메소드: ['GET', 'POST'])] 공개 기능 편집(요청 $request, Bordereau $bordereau, BordereauRepository $bordereauRepository, BordereauEditModel $bordereauEdit): 응답 { $bordereauEdit = 새로운 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, '양식' => $formBordereau, ]); } </pre> <p>동적을 로드하려고 하면 "Call member function format() on null"이라는 메시지가 표시됩니다. 이것이 또 다른 질문인지는 잘 모르겠습니다. 여기에서 해당 질문을 삭제해야 합니다(예: 사람들이 혼동하지 않도록 기본 게시물의 단락으로) </p> <p>null에서 멤버 함수 format() 호출 ->
P粉715304239P粉715304239444일 전669

모든 응답(1)나는 대답할 것이다

  • P粉394812277

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

    확인할 조건에서 IN。如果要使用IN를 제거하면 비교 연산자를 사용할 수 없습니다.

    으아악

    회신하다
    0
  • 취소회신하다