理论将行分组为一行并且SUM数量不起作用

时间:2014-02-03 18:04:20

标签: php mysql sql symfony doctrine-orm

我有一个学说查询,我试图将相似的行分组并将它们的数量(qty)相加。它看起来像这样,但它不起作用......

public function getProducts($id, $account_id){

    $query = $this->getEntityManager()
        ->createQuery('
        SELECT      p, pr, sum(p.qty) as qty
        FROM        WIC\PurchaseOrderBundle\Entity\PurchaseOrderProductsStatus p
        JOIN        p.product pr
        WHERE       p.inventoryLocation = :id
        AND         p.account = :account_id
        GROUP BY    p.product')
        ->setParameter('id', $id)
        ->setParameter('account_id', $account_id);

    try{
        return $query->getArrayResult();
    }catch (\Doctrine\ORM\NoResultException $e) {
        return $e;
    }
}

我收到以下错误:

 Key "product" for array with keys "0, qty" does not exist in my twig template

如果我删除“,sum(p.qty)作为数量”它工作正常,它只是不给我我分组的列的SUM。

这是我的Twig模板中的循环。

 {% for productAction in productActions %}
                        <tr>
                            <td>{{ productAction.product.id }}</td>
                            <td>{{ productAction.product.sku }}</td>
                            <td>{{ productAction.product.name }}</td>
                            <td>{{ productAction.qty }}</td>
                            <td></td>
                        </tr>
                    {% endfor %}

任何人都知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:1)

http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#pure-and-mixed-results

结果的性质可以是两种形式:纯粹和混合。 默认情况下,结果类型是纯的,但只要标量值(例如聚合值或不属于实体的其他标量值)出现在DQL查询的SELECT部分​​中,结果就会混合。 混合结果具有与纯结果不同的结构,以适应标量值。

纯粹的结果通常如下所示:

array(
    '0' => obj1,
    '1' => obj2
);

另一方面,混合结果具有以下一般结构:

array(
    '0' => array(
        '0' => Obj1,
        'qty' => your scalar value sum(p.qty)
    ),
    '1' => array(
        '0' => Obj2,
        'qty' => your scalar value sum(p.qty)
    ),
);