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

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

 

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

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

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

 

 

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

関連するカスタマイズ

メーカープラグインのメーカー名で商品を絞り込む方法... メーカープラグインを導入した場合、メーカー名で商品を絞り込みたくなることがあると思います。 この検索を実現するにはプラグインのテーブルを商品のテーブルにjoinします。 メーカープラグインはProductMakerとMakerというエンティティクラスを保有しており、これらのクラスを使用し...
style.cssに#contents min-height: 100vh;は必要か?... default/css/style.cssに #contents { min-height: 100vh;}という最低の高さ指定があります。 デフォルトテーマでこれを全ページに適用させている理由としては、新規ページ等でコンテンツが少ない場合に、ある程度高さがないと見た目が悪いということだと思...
Bootstrap3のクラスform-controlを取り除く方法(form_widget)... EC-CUBE3.0系ではSymfonyComponentの1つであるFormにより、Twig内では強力な関数form_widget、form_errorsが使用できます。 これらは作成したFormType(定義ファイル)に従って自動で初期データ入力やエラー処理をしてくれるというたいへん便利な...
Choiceタイプ(ラジオボタン)でNoneを消す方法... セレクトボックスやチェックボックス、ラジオボタンを簡単に生成することができるChoiceタイプは非常に強力なフォームタイプです。 ただ添付画像のようにラジオボタンを生成したときにNoneという選択肢が自動で表示されることがあります。 このNoneの消し方は意外と知られてい...

弊社はEC-CUBE公式インテグレートパートナーです。