symfony过滤器从[field = value]到[field LIKE%value%]的行为改变

时间:2011-12-14 11:46:03

标签: php mysql symfony1 doctrine symfony-forms

在我的过滤器中,字段的行为是在数据库表中搜索具有字段equal值的行到过滤表单中提供的值。我想更改其行为以在DB表中搜索具有与表单(%LIKE%)中提供的字段值匹配的行/行。

我知道可以通过向过滤器类添加addFieldnameColumnQuery方法来完成,但我想知道的是,还有另外一种方法吗?

该字段恰好是外键,我希望它像普通文本字段一样工作。

更新:这是一个愚蠢的错误。我需要为widgetSchema分配一个sfWidgetFormFilterInput,但我使用的是sfWidgetFormInput,它导致它寻找相等而不是匹配。

1 个答案:

答案 0 :(得分:1)

我从未听说过另一种方式...查看位于sfFormFilterDoctrine的{​​{1}}课程,了解此系统的工作原理以及如何编写lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\form

<强>更新 要仅将字段的过滤器行为(例如addFieldnameColumnQuery)从外键更改为普通文本,您只需设置窗口小部件并覆盖myfieldgetFields()类中包含如下代码:

MymoduleFormFilter

相反,如果你定义一个字段来搜索连接表,你还没有根据你在generator.yml中写的字段名来设置小部件

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

最后在 join where 代码中添加filter: display: [... some fields ..., myfield] 。对不起,没有任何代码片段,因为我使用的是Propel。