「Symfony 5.4: パラメーターが少なすぎます: クエリは 2 つのパラメーターを定義しましたが、バインドされているのは 1 つだけです」という問題を解決するにはどうすればよいですか?
P粉715304239
2023-09-02 12:53:54
<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>
条件から
リーリーIN
を削除します。IN
を使用して確認する場合、比較演算子は使用できません。