我一直在寻找一种方法来设置APYDataGridBundle网格应返回但无法找到答案的项目列表中的条件。
有没有办法设置DQL查询并将其传递给网格以显示我想要获取的确切查询结果?
这是代码:
public function filteredlistAction(){
// Create simple grid based on the entity
$source = new Entity('ACMEBundle:MyEntity');
// Get a grid instance
$grid = $this->get('grid');
// Attach the source to the grid
$grid->setSource($source);
...
...
**$grid->getColumns()->getColumnById('myentity_filter_column')->setData('the exact value I tried to match');**
// Manage the grid redirection, exports and the response of the controller
return $grid->getGridResponse('ACMEBundle:MyEntity:index_filteredlist.html.twig');
}
答案 0 :(得分:3)
你可以添加一个回调(闭包或可调用)来在QueryBuilder
执行之前运行 - 它的完成方式如下:
$source->manipulateQuery(
function ($query)
{
$query->resetDQLPart('orderBy');
}
);
$grid->setSource($source);
$query
是QueryBuilder
的一个实例,因此您可以更改所需内容
答案 1 :(得分:0)
更多"复杂"查询。
$estaActivo = 'ACTIVO';
$tableAlias = $source->getTableAlias();
$source->manipulateQuery(
function ($query) use ($tableAlias, $estaActivo)
{
$query->andWhere($tableAlias . '.estado = :estaActivo')
->andWhere($tableAlias . '.tipoUsuario IN (:rol)')
->setParameter('estaActivo', $estaActivo)
->setParameter('rol', array('VENDEDOR','SUPERVISOR'), \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);
}
);
干杯!