我正在创建一个工具,用户可以在其中查看实体中的数据,他们可以在这里选择哪些数据以及他们如何查看记录。
我创建了一个包含两个日期字段(开始和结束)的表单,以及一个与数据计数和实体总和相对应的字段列表。
我的问题是:
如何创建动态QueryBuilder,允许我根据用户想要看到的内容添加字段?
Symfony2 dynamic queryBuilder 的编辑
public function reportData($fields, $dateStart, $dateFinish)
{
$em = $this->getEntityManager()
->getRepository('AcmeBundle:Entity');
$query = $em->createQueryBuilder('e');
foreach($fields as $field)
{
switch($field)
{
case 'totalResults':
$query->setect('SUM(e.id) AS '.$field);
break;
}
}
$query->addWhere('e.dateStart >= :dateStart');
$query->addWhere('e.dateFinish <= :dateFinish');
...
答案 0 :(得分:0)
这样的东西?将所有选择查询存储在数组中,然后在测试每个字段后将数组传递给查询构建器。
public function reportData($fields, $dateStart, $dateFinish)
{
$em = $this->getEntityManager()
->getRepository('AcmeBundle:Entity');
$query = $em->createQueryBuilder('e');
$select_array = array();
foreach($fields as $field)
{
switch($field)
{
case 'totalResults':
$select_array[] = 'SUM(e.id) AS '.$field;
break;
}
}
$query->select($select_array);
$query->addWhere('e.dateStart >= :dateStart');
$query->addWhere('e.dateFinish <= :dateFinish');
....
答案 1 :(得分:0)
基本上,您希望继续添加
选择字段
根据条件。 所以,解决方案很简单。
你可以使用,
$queryBuilder->addSelect();
答案 2 :(得分:0)
我会做一个常规的完整查询,然后将其过滤到非教义对象(dao / dto),然后显示它。
这样您就可以先进行复杂优化的查询,然后根据需要过滤结果,即使它与查询本身无关