etornar chave estrangeira com consulta D
Eu tenho uma entidade InvoiceItem assim:
/**
* @Entity
*/
class InvoiceItem
{
[..]
/**
* @ManyToOne(targetEntity="Invoice", inversedBy="items")
* @JoinColumn(name="invoice_id", referencedColumnName="id")
* @var Invoice
*/
private $invoice;
/**
* @Column(type="decimal", scale="10", precision="3")
* @var float
*/
private $qty;
/**
* @Column(name="unit_price", type="decimal", scale="10", precision="3")
* @var float
*/
private $unitPrice;
[..]
}
Gostaria de retornar uma matriz em que a chave seja o ID da fatura e o valor a soma de qty * unitPrice.
Posso retornar a soma com uma consulta DQL assim:
SELECT SUM(I.qty * I.unitPrice) AS amount FROM Entities\\InvoiceItem I
WHERE I.invoice IN (..) GROUP BY I.invoice
O resultado
array(
0 => array('amount' => '46.7'),
1 => array('amount' => '32.5')
)
Mas eu não sei como r, retornar a chave estrangeira da fatura. Eu tente
SELECT SUM(I.qty * I.unitPrice) AS amount, I.invoice
FROM Entities\\InvoiceItem I
WHERE I.invoice IN (..) GROUP BY I.invoice
Mas não funciona (erro: PathExpression inválido. Deve ser um StateFieldPathExpression.)
Como posso devolver o ID da fatura? E eu gostaria de usar o ID como a chave da minha matriz de resultados:
array(
1005 => '46.7',
1250 => '32.5'
)
onde 1005 e 1250 são o ID das fatura
Update 15-06-2011
consulta @Native funciona:
$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addScalarResult('invoice_id', 'invoiceId');
$rsm->addScalarResult('amount', 'amount');
$q = $this->getEntityManager()->createNativeQuery(
'SELECT invoice_id, SUM(qty * unit_price) AS amount FROM invoices_items'
.' WHERE invoice_id IN ('.implode(',', $ids).') GROUP BY invoice_id',
$rsm
);
$result = $q->getResult();
o resultado
array(
0 =>
array(
'invoiceId' => '1005',
'amount' => '46.7'
)
1 =>
array(
'invoiceId' => '1250',
'amount' => '32.5'
)
)
Mas eu preciso fazer um loop para indexar pelo ID da fatur