如何解决通过DQL查询返回外键
| 我有一个这样的InvoiceItem实体:/**
* @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\",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编制索引。
解决方法
您可以使用setHint()方法使外键与您实体的其余值一起返回。您将方法应用于查询(而不是querybuilder):
$q = $qb->getQuery();
$q->setHint(\\Doctrine\\ORM\\Query::HINT_INCLUDE_META_COLUMNS,true);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。