7
我有一個InvoiceItem實體是這樣的:返回外鍵與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;
[..]
}
我想返回一個數組,其中的關鍵是發票的id和值數量的總和* 單價。
我可以用DQL這樣的查詢返回的總和:
SELECT SUM(I.qty * I.unitPrice) AS amount FROM Entities\\InvoiceItem I
WHERE I.invoice IN (..) GROUP BY I.invoice
結果:
array(
0 => array('amount' => '46.7'),
1 => array('amount' => '32.5')
)
但我不知道怎麼回的發票外鍵。我試過
SELECT SUM(I.qty * I.unitPrice) AS amount, I.invoice
FROM Entities\\InvoiceItem I
WHERE I.invoice IN (..) GROUP BY I.invoice
但它不工作(錯誤:無效PathExpression必須是StateFieldPathExpression。)
我怎樣才能返回發票ID?我想用ID作爲我的結果數組的鍵:
array(
1005 => '46.7',
1250 => '32.5'
)
其中1005和1250是發票的ID。
更新2011-06-15
本地查詢工作:
$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();
結果:
array(
0 =>
array(
'invoiceId' => '1005',
'amount' => '46.7'
)
1 =>
array(
'invoiceId' => '1250',
'amount' => '32.5'
)
)
但我需要憑發票ID進行一個循環的索引。
據我所知,你必須通過他們創建一個新的陣列來獲得您的發票編號爲採取行動,只是得到的結果,然後循環數組鍵。 – 2011-06-14 19:15:31
HINT_INCLUDE_META_COLUMNS工作,但我需要包括至少一個字段:SELECT SUM(I.qty * I.unitPrice)AS amount,PARTIAL I. {id} ... – Maxence 2011-06-15 05:46:15
是的,我不認爲有反正在那附近。 – 2011-06-15 13:28:40