Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php symfony筛选器将行为从[field=value]更改为[field LIKE%value%]_Php_Mysql_Symfony1_Doctrine_Symfony Forms - Fatal编程技术网

Php symfony筛选器将行为从[field=value]更改为[field LIKE%value%]

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表中搜索一行,该行的字段
值等于筛选表单中提供的值。我想更改其行为,在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。