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

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

 

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

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

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

 

 

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

関連するカスタマイズ

メーカープラグインのメーカー名で商品を絞り込む方法... メーカープラグインを導入した場合、メーカー名で商品を絞り込みたくなることがあると思います。 この検索を実現するにはプラグインのテーブルを商品のテーブルにjoinします。 メーカープラグインはProductMakerとMakerというエンティティクラスを保有しており、これらのクラスを使用し...
ドクトリンで用いられるエンティティとレポジトリとは?... EC-CUBE3やEC-CUBE4で開発を行なっていると必ず耳にするのがドクトリンやエンティティ、レポジトリといったデータベース周りの用語です。 ECサイトはデータベースと密接に関係しているため、これらを用いずにEC-CUBEの開発を行うことは不可能です。 エンティティとレポジトリとは? ...
Composer is not installed. と表示される原因と解決方法... 新しくインストールしようとしてGitからソースを持ってきた時に画面上にComposer is not installed. だけ表示される場合がよくあります。 vendor配下のライブラリはgitignoreするのが一般的なので、git cloneしたソースに/vendor/ディレクトリが存在...
decimalタイプのオプション、precisionとscaleとは?... テーブルの定義ファイル(dcm.yml)を見てみると、price02やtaxなど金額関係のカラムにはdecimal型が使われていることが分かります。 ProductClass.dcm.ymlには下記のように記載があります。 他のカラムの定義には見かけないprecisionとsca...