这可以通过使用虚拟列来完成,就像您找到的帖子一样。虚拟列是一种使用 symfony 提供的自动生成过滤器添加新标准进行过滤的方法。它的工作原理是这样的:
1 - 转到管理模块的 generator.yml 并添加将创建和添加的虚拟列的名称
<!-- apps/backend/modules/module_name/config/generator.yml -->
filter:
[virtual_column_name, and, other, filter, columns]
2 - 在您的 lib/filter/{TableName}FormFilter.class.php(我认为在您的情况下必须是 HeadingFormFilter)中,您必须在 configure() 方法中定义该虚拟列
public function configure()
{
//Type of widget (could be sfWidgetFormChoice with bank names)
$this->widgetSchema['virtual_column_name'] = new sfWidgetFormInputText(array(
'label' => 'Virtual Column Label'
));
//Type of validator for filter
$this->validatorSchema['virtual_column_name'] = new sfValidatorPass(array ('required' => false));
}
3 - 覆盖该类的 getFields() 以在过滤器中定义它并设置过滤器功能
public function getFields()
{
$fields = parent::getFields();
//the right 'virtual_column_name' is the method to filter
$fields['virtual_column_name'] = 'virtual_column_name';
return $fields;
}
4 - 最后你必须定义过滤方法。此方法必须以 add...ColumnQuery 模式命名,在我们的例子中必须是 addVirtualColumnNameColumnQuery(不是一个愉快的名称选择:P),所以
public function addVirtualColumnNameColumnQuery($query, $field, $value)
{
//add your filter query!
//for example in your case
$rootAlias = $query->getRootAlias();
$query->innerJoin($rootAlias . '.ImportProfile ip')
->andWhere('ip.BankId = ?', $value);
//remember to return the $query!
return $query;
}
完成!你可以通过bank_id知道过滤器。