Php symfony筛选器将行为从[field=value]更改为[field LIKE%value%]
在我的筛选器中,字段的行为是在DB表中搜索一行,该行的字段Php symfony筛选器将行为从[field=value]更改为[field LIKE%value%],php,mysql,symfony1,doctrine,symfony-forms,Php,Mysql,Symfony1,Doctrine,Symfony Forms,在我的筛选器中,字段的行为是在DB表中搜索一行,该行的字段值等于筛选表单中提供的值。我想更改其行为,在DB表中搜索字段值与表单中提供的字段值匹配的行(%like%) 我知道可以通过向filter类添加一个addFieldnameColumnQuery方法来实现,但我想知道的是,还有其他方法吗 该字段恰好是一个外键,我希望它能像普通文本字段一样工作 更新:这是一个愚蠢的错误。我需要将sfWidgetFormFilterInput分配给widgetSchema,但我使用的是sfWidgetFormI
值等于筛选表单中提供的值。我想更改其行为,在DB表中搜索字段值与表单中提供的字段值匹配的行(%like%
)
我知道可以通过向filter类添加一个addFieldnameColumnQuery
方法来实现,但我想知道的是,还有其他方法吗
该字段恰好是一个外键,我希望它能像普通文本字段一样工作
更新:这是一个愚蠢的错误。我需要将sfWidgetFormFilterInput分配给widgetSchema,但我使用的是sfWidgetFormInput,这导致它寻找相等而不是匹配。我从未听说过其他方法。。。查看位于lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\form
中的sfFormFilterDoctrine
类,以了解此系统的工作原理以及如何编写addFieldnameColumnQuery
更新
要仅更改字段的筛选行为,例如myfield
,从外键更改为普通文本,您只需设置小部件并在MymoduleFormFilter
类中使用以下代码覆盖getFields()
:
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(doctor\u Query$Query,$field,$values)
,其中包含连接和where代码。很抱歉,因为我使用的是Prope,所以没有代码片段。好吧,这就是我的目的,我的观点是,这样我们必须编写3行代码,也许相反,我们可以在一个地方更改generator.yml。