sfFormFilterPropel::addNumberCriteria(メモ)
SynfonyのAdminGeneratorで管理画面を生成した時に、リストのフィルタ(検索)クエリの生成に使われる部分
<?php 187 protected function addNumberCriteria(Criteria $criteria, $field, $values) 188 { 189 $colname = $this->getColname($field); 190 191 if (is_array($values) && isset($values['is_empty']) && $values['is_empty']) 192 { 193 $criterion = $criteria->getNewCriterion($colname, ''); 194 $criterion->addOr($criteria->getNewCriterion($colname, null, Criteria::ISNULL)); 195 $criteria->add($criterion); 196 } 197 else if (is_array($values) && isset($values['text']) && '' != $values['text']) 198 { 199 $criteria->add($colname, $values['text']); 200 } 201
後半のelse ifで「'' != $values['text']」という評価がありますが、addNumberCriteriaを利用する数値フィールドの場合、フォーム側ではsfValidatorIntegerなどが利用されており、$values['text']の中身はinteger値になっています。
なので、「1」や「2」という入力については条件が成立しますが、「0」という入力の場合、PHPでは「'' != $values['text']」が成り立たないため、条件がスルーされてしまいます。
sfValidatorIntegerを経由する限り、入力値がintvalを経由するので、空の場合と0の場合を区別できないんですよね・・・。
この矛盾を回避するには、sfValidatorIntegerを使うのをあきらめる方向しかないでしょうか・・・。
[2010/02/13追記]
symfony 1.3.2/1.4.2で修正されたようです