Project

General

Profile

Backport(バックポート) #3081

Updated by Rimpei Ogawa over 7 years ago

h3. 現象

activity/community.json 呼び出し時に下記のようなエラーがhttpdのエラーログに出力されて500エラーとなる。
<pre>
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
</pre>
発生した現象を記入

is_active: 0 のメンバー(仮登録中のメンバー)が1人以上いる場合に発生する。

h3. 原因

マイフレンドまで公開のアクティビティを取得するための条件の中で、is_active: 0 のメンバーを対象外とするためにサブクエリ内に @member_id_to NOT IN ?@ を追加していたが、この形式の DQL を Doctrine が正しくパースできず、最終的にパラメーター数が一致しない SQL とパラメーターの組が生成されていたためにエラーとなっていた。 バグが発生した原因を記入

inactiveIds が空の場合は opDoctrineQuery::andWhereIn() により @->andWhere('0 = 1');@ に書き換えられるため問題が発生しない。

h3. 修正内容

問題箇所のクエリでは Member モデルを必ず leftJoin しているため、opActivateListener により is_active のチェックが自動的に追加される。

このクエリにおいて is_active: 0 のメンバーを除外するには Member に対する絞り込みのみで十分であるため、マイフレンドまで公開のアクティビティを抽出する部分からは is_active: 0 を除外する条件を冗長と判断し削除した。
修正内容を記入

Back