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