クエリビルダを使用して開発していると頻繁に出くわす例外エラーがQueryExceptionです。
その中でも有名なInvalid parameter numberについてご紹介致します。

この例外はクエリビルダにバインドした変数の数と、渡したパラメーターの数が異なるときに発生します。
よくあるのは次の順番でwhereを2回使用してしまうパターンです。

 

この場合、1回目のwhereはなかったことになってしまいますので
Invalid parameter number!!と怒られてしまいます。

正しくは次のようにandWhereを使用します。

1つのチェーンになっていればまず気づくのですが、ProductRepositoryのgetQueryBuilderBySearchDataのように
ユーザーが指定した条件によって様々切り分けが必要な場合、チェーンが分断されて気づきにくくなりミスをしてしまいがちです。

 

 

EC-CUBEで開発をされている方はぜひご確認ください。

関連するカスタマイズ

メーカープラグインのメーカー名で商品を絞り込む方法... メーカープラグインを導入した場合、メーカー名で商品を絞り込みたくなることがあると思います。 この検索を実現するにはプラグインのテーブルを商品のテーブルにjoinします。 メーカープラグインはProductMakerとMakerというエンティティクラスを保有しており、これらのクラスを使用し...
新しくテーブルを作ってエンティティと関連づける方法... 今回は非常に要望が多かった新しいテーブルを作ってエンティティとしてデータ取得をできるようにする方法をご紹介します。 この方法は3系のもので、まもなくリリースされるEC-CUBE4系では利用できませんのでご注意ください。 データベースの作成 ドクトリン定義ファイルの作成(dcm....
商品一覧のページネーションに「最初へ」「最後へ」を表示する方法... 商品一覧ページのページネーションはProduct/list.twigを見るとpagination.twigをインクルードすることで表示されています。 pagination.twigをのぞいて見ると「最後へ」の部分は次のようなコードが書かれています。 このリンクを表示するにはconfi...
ドクトリンで用いられるエンティティとレポジトリとは?... EC-CUBE3やEC-CUBE4で開発を行なっていると必ず耳にするのがドクトリンやエンティティ、レポジトリといったデータベース周りの用語です。 ECサイトはデータベースと密接に関係しているため、これらを用いずにEC-CUBEの開発を行うことは不可能です。 エンティティとレポジトリとは? ...