1

次のコードがあります。

$somethingArray = array( 3, 4, 5 );

$myObjects = MyObjQuery::create()
  ->filterBySomething( $somethingArray )
  ->filterById( array( 'min' => $minMyObjID ) )
  ->orderByObjTimestamp('DESC')
  ->find();

Propel のドキュメントによると、これは「something」が somethingArray 配列内にあるかどうか、ID が > $minMyObjID であるかどうかを最終的にチェックする SQL コマンドになるはずです。ただし、ID は > ではなく IN です。

代わりに次のようにすると:

$myObjects = MyObjQuery::create()
  ->filterBySomething( $somethingArray )
  ->where( 'id > ' . $minMyObjID )
  ->orderByObjTimestamp('DESC')
  ->find();

結果として得られる SQL は、私が期待するものです。これは Propel のバグですか? それとも、filterByXXX パラメーターに関してドキュメントを誤解していますか?

4

1 に答える 1

1

Propelバグトラッカーで問題を見つけました:https ://github.com/propelorm/Propel/issues/327

これは公式のバグです。現在、パッチはありません。

回避策は、filterById::の2番目のパラメーターを使用することですcomparison

->filterById($minMyObjID, '>')

これはあなたが見つけたのと同じ回避策につながりますが、より推進力のある方法で

于 2012-11-07T20:45:17.970 に答える