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;
}