0

我有一个请求来创建一个表单过滤器,它有两个字段,一个是自由格式文本,另一个是选择。select中的值将决定如何处理将文本中的值变成一个条件。

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

4

1 回答 1

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;
  }

}

对于 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;
   }

}

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

于 2012-06-20T22:38:31.510 回答