在我的过滤器中,字段的行为是在数据库表中搜索字段值等于
与过滤表单中提供的值的行。我想更改其行为,以在数据库表中搜索字段值与表单中提供的字段值匹配的行(%LIKE%
)。
我知道可以通过向过滤器类添加 addFieldnameColumnQuery
方法来完成,但我想知道的是,还有其他方法吗?
该字段恰好是外键,我希望它像普通文本字段一样工作。
更新:这是一个愚蠢的错误。我需要将 sfWidgetFormFilterInput 分配给 widgetSchema,但我使用的是 sfWidgetFormInput,这导致它寻找相等而不是匹配。
最佳答案
我从未听说过其他方式...看看 sfFormFilterDoctrine
类位于lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\form
了解该系统的工作原理以及如何编写 addFieldnameColumnQuery
更新
要仅更改字段的过滤器行为,请说 myfield
,从外键到普通文本,您只需设置小部件并覆盖 getFields()
在MymoduleFormFilter
带有如下代码的类:
public function configure()
{
$this->setWidget('myfield', new sfWidgetFormFilterInput());
$this->setValidator('myfield', new sfValidatorPass(array('required' => false)));
}
public function getFields()
{
$fields = parent::getFields();
$fields['myfield'] = 'Text';
return $fields;
}
相反,如果您定义要在连接表中搜索的字段,则尚未根据您在generator.yml中编写的字段名称设置小部件
filter:
display: [... some fields ..., myfield]
最后添加 addMyfieldColumnQuery(Doctrine_Query $query, $field, $values)
with 位于 join 和 where 代码中。抱歉,没有此片段,因为我使用 Propel。
关于php - symfony 过滤器将行为从 [field=value] 更改为 [field LIKE %value%],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8503938/