Symfony1 带join的symfony管理筛选器

Symfony1 带join的symfony管理筛选器,symfony1,Symfony1,我有一个表,heading,它有一个import\u profile\u id导入配置文件具有银行id 在“我的管理员”的“标题列表”页面上,我想添加按bank\u id过滤的功能。然而,由于标题没有银行id——它需要通过导入配置文件,才能得到它——我不能仅仅添加一个银行id字段并期望它能工作 有人能解释一下怎么做吗?我发现的最接近的东西是,但我认为它并没有真正解决我的问题。这可以通过使用虚拟专栏来实现,就像你找到的帖子一样。虚拟列是一种使用symfony提供的自动生成筛选器添加新条件以进行筛选

我有一个表,
heading
,它有一个
import\u profile\u id
<代码>导入配置文件具有
银行id

在“我的管理员”的“标题列表”页面上,我想添加按
bank\u id
过滤的功能。然而,由于
标题
没有
银行id
——它需要通过
导入配置文件
,才能得到它——我不能仅仅添加一个
银行id
字段并期望它能工作


有人能解释一下怎么做吗?我发现的最接近的东西是,但我认为它并没有真正解决我的问题。

这可以通过使用虚拟专栏来实现,就像你找到的帖子一样。虚拟列是一种使用symfony提供的自动生成筛选器添加新条件以进行筛选的方法。它的工作原理如下:

1-转到管理模块的generator.yml,添加将创建和添加的虚拟列的名称

<!-- apps/backend/modules/module_name/config/generator.yml -->
filter:
     [virtual_column_name, and, other, filter, columns]
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),所以


完成了!您可以通过bank_id了解过滤器。

您似乎是为symfony 1.1.4版或更高版本编写此示例的,所以您是在哪个版本上完成的?它是为symfony 1.4.1版或更高版本制作的。对于sf 2.0 Hanks@Pabloks,你的解释能力真是太棒了+1.
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;
}
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;
}