Это можно сделать с помощью виртуальных столбцов , таких как сообщение, которое вы нашли. Виртуальный столбец - это способ добавить новый критерий для фильтрации с помощью автоматически сгенерированного фильтра, предоставленного 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.