如何访问自定义addXXXColumnCriteria内的其他过滤器值?

时间:2012-05-31 00:32:49

标签: symfony1 symfony-1.4 propel symfony-forms

我有一个创建表单过滤器的请求,该表单过滤器有两个字段,一个是自由格式文本 另一个选择。 select中的值将决定如何处理将文本的值转换为标准。

我可以为任一字段创建自定义addXXXColumnCriteria,但如何从此函数中访问其他字段?

1 个答案:

答案 0 :(得分:2)

我建议您不要使用de addXXXColumnCriteria,而是覆盖FormFilter doBuildCriteria(Propel)或doBuildQuery(Doctrine)方法。 我从未使用过Propel,但我认为这与Doctrine一样好。

例如:

class yourPropelFormFilter extends anyKindOfSfFormFilterPropel {

  public function doBuildCriteria(array $values) {

     $criteria = parent::doBuildCriteria($values);

     // ... change the criteria behaviour with the $values array (do some print_r to $values to see how the data array is formatted)

     return $criteria;
  }

}

For Doctrine(记得使用getRootAlias查询方法):

class yourDoctrineFormFilter extends anyKindOfSfFormFilterDoctrine {

   public function doBuildQuery(array $values) {
      $q = parent::doBuildQuery($values);
      $rootAlias = $q->getRootAlias();

      if(...) {
        $q->innerJoin($rootAlias.'.RelationX rx')
          ->addWhere('rx.value = ?',$values['...']);
      }

      return $q;
   }

}

请记得返回条件/查询修改对象!