ホームページ  >  に質問  >  本文

「Symfony 5.4: パラメーターが少なすぎます: クエリは 2 つのパラメーターを定義しましたが、バインドされているのは 1 つだけです」という問題を解決するにはどうすればよいですか?

<p>ボルドーで支払われるすべてのスタジエールをロードしたいと考えています。日付間隔を選択し、インターンの属性をそれらの日付間隔に渡すことで、その日付間隔内に終了したインターンシップのみを選択したいと考えています。 </p><p> 「Interns」と「Payment」は関連していませんが、両方のテーブルにリンクするテーブル「Interns_Payment」(Bordereau_stagiaire) があります。これをリポジトリ経由で実行し、PaymentController の Edit にロードしたいと考えています。 symfnony</p> を初めて使用します。 <p>このクエリは Payment(Bordereau)Repository に書きました</p> <pre class="brush:php;toolbar:false;"> 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 >= 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'])] public function edit(Request $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' => $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;">public function 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('削除', $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>BordereauEditModel</code> とカスタム フォーム</p> も <code>BordereauEditType</code> から作成しました。 <p>これは、<code>BordereauController</code> の <code>edit</code> 関数</p>です。 <pre class="brush:php;toolbar:false;"> #[Route('/{id}/edit', 名前: 'app_bordereau_edit', メソッド: ['GET', 'POST'])] public function edit(Request $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' => $bordereau, 'フォーム' => $formBordereau, ]); } </pre> <p>動的にロードしようとすると、「null でメンバー関数 format() を呼び出します」と表示されます。これが別の質問であるかどうかはわかりません。ここから削除する必要があります (つまり、人々が混乱しないようにメイン投稿の段落として)</p> <p>null でメンバー関数 format() を呼び出す -> 解決済み</p>
P粉715304239P粉715304239412日前635

全員に返信(1)返信します

  • P粉394812277

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

    条件から IN を削除します。 IN を使用して確認する場合、比較演算子は使用できません。

    リーリー

    返事
    0
  • キャンセル返事