gpt4 book ai didi

php - 使用 DQL 查询返回外键

转载 作者:可可西里 更新时间:2023-11-01 06:36:48 25 4
gpt4 key购买 nike

我有一个像这样的 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", scale="10", precision="3")
* @var float
*/
private $unitPrice;

[..]
}

我想返回一个数组,其中键为发票 ID,值为 qty * unitPrice 的总和。

我可以用这样的 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

native 查询有效:

    $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() 方法使外键与实体的其余值一起返回。您将该方法应用于查询(而不是查询生成器):

$q = $qb->getQuery();
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);

关于php - 使用 DQL 查询返回外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6340789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com