php - symfony 过滤器将行为从 [field=value] 更改为 [field LIKE %value%]

标签 php mysql symfony1 doctrine symfony-forms

在我的过滤器中,字段的行为是在数据库表中搜索字段值等于与过滤表单中提供的值的行。我想更改其行为,以在数据库表中搜索字段值与表单中提供的字段值匹配的行(%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 位于 joinwhere 代码中。抱歉,没有此片段,因为我使用 Propel。

关于php - symfony 过滤器将行为从 [field=value] 更改为 [field LIKE %value%],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8503938/

相关文章:

php - 如何在 iis 服务器上启用 mod_rewrite

php - Quickbooks Windows 与 PHP MySQL 镜像同步

php - 使用 PHP 向 mysql 添加空行的准备语句

php - 通过电子邮件发送在 HTML5 canvas 上创建的图像

javascript - 使用ajax将时间以秒为单位传递给div

php - 如何对 PHP 脚本的效率进行基准测试

php - 在 2 个 URL 中显示相同的结果

css - 我如何正确地包含带有 symfony 的样式表?

php - Symfony 路由 - 可选参数

testing - 如何在 sfTestBrowser 中模拟 SELECT 控件的选择