Symfony querybuilder - 无法选择额外的字段和 OneToMany 关系

时间:2020-12-22 16:50:22

标签: symfony doctrine-orm

我正在构建一个查询 throw querybuilder 对象,例如

$qb = $em->createQueryBuilder()
->select('n, t, ns1m')
->from('App\Entity\Nuclei','n')
->leftJoin('n.statistiche1M', 'ns1m', 'WITH', 'DATE_PART(\'year\', ns1m.dataora) = YEAR(CURRENT_DATE())')
->leftJoin('n.codicitag', 't')
->where('n.comune = :id_comune')
->setParameter('id_comune', $this->user->getComune()->getId());

此查询返回实体对象“nucleo”的数组:

array:3 [▼
    0 => App\Entity\Nuclei { ... }
    1 => App\Entity\Nuclei { ... }
    2 => App\Entity\Nuclei { ... }

我想添加另一列以供选择

->addSelect('SUM(ns1m.totale_peso_conferimenti_indifferenziata) AS total_test')

但现在的结果是:

array:2 [▼
  0 => array:2 [▼
    0 => App\Entity\Nuclei {#1671 ▶}
    "total_test" => 1520
  ]
  1 => array:2 [▶]
]

n.codicitag 是一个单向关系,是其他对象的集合

如何处理?做了很多测试都没有成功

2 个答案:

答案 0 :(得分:1)

您要求的结果是什么?结果看起来不错。您获得每个 Nuclei 对象的总和。

如果你需要总和而不改变结果结构,创建额外的查询:

$qb = $em->createQueryBuilder()
    ->select('SUM(ns1m.totale_peso_conferimenti_indifferenziata) AS total_test')
    ->from('App\Entity\Statistiche1M','s1m')
    ->where('DATE_PART(\'year\', ns1m.dataora) = YEAR(CURRENT_DATE())');

此查询返回按当前年份过滤的总和。

答案 1 :(得分:0)

你可以试试:

const char*

因为 addSelect() 创建新数组。