我有一个创建表单过滤器的请求,该表单过滤器有两个字段,一个是自由格式文本 另一个选择。 select中的值将决定如何处理将文本的值转换为标准。
我可以为任一字段创建自定义addXXXColumnCriteria,但如何从此函数中访问其他字段?
答案 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;
}
}
请记得返回条件/查询修改对象!