Tengo una entidad InvoiceItem así:clave externa con la consulta DQL
/**
* @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;
[..]
}
me gustaría devolver una matriz donde la clave será la identificación de la factura y el valor de la suma de Cant * precio unitario.
puedo devolver la suma con una consulta DQL como esto:
SELECT SUM(I.qty * I.unitPrice) AS amount FROM Entities\\InvoiceItem I
WHERE I.invoice IN (..) GROUP BY I.invoice
El resultado:
array(
0 => array('amount' => '46.7'),
1 => array('amount' => '32.5')
)
Pero no sé cómo devolver la clave externa de la factura. He intentado
SELECT SUM(I.qty * I.unitPrice) AS amount, I.invoice
FROM Entities\\InvoiceItem I
WHERE I.invoice IN (..) GROUP BY I.invoice
Pero no funciona (error:. PathExpression no válida Debe ser un StateFieldPathExpression.)
¿Cómo puedo devolver el ID de factura? Y me gusta usar la ID como la clave de mi campo de resultados:
array(
1005 => '46.7',
1250 => '32.5'
)
en 1005 y 1250 corresponden a la identificación de las facturas.
actualización 2011-06-15
consulta nativa 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();
el resultado:
array(
0 =>
array(
'invoiceId' => '1005',
'amount' => '46.7'
)
1 =>
array(
'invoiceId' => '1250',
'amount' => '32.5'
)
)
pero necesito hacer un bucle para el índice de la factura ID .
Por lo que yo sé, que tendrá que acaba de obtener los resultados a continuación, recorrer ellas la creación de una nueva matriz para obtener su ID de factura para actuar como la tecla de matriz –
HINT_INCLUDE_META_COLUMNS funciona, pero necesito incluir al menos uno de los campos: SELECT SUM (I.qty * I.unitPrice) AS amount, PARCIAL I. {id} ... – Maxence
Cierto, no creo que exista de todos modos Alrededor de eso. –