例如,假设我随时间存储客户帐户余额变化。我在表格中存储了更改金额(字段为amount
),以及更改日期(date
)。
假设我有一个更改,并且我想获取该用户之前的更改量(这不是对象的属性)。如果我手工编写SQL查询,我会做这样的事情:
SELECT *,
(SELECT b1.amount
FROM balanceHistory as b1
WHERE b1.date < b0.date
AND customer_id = 123
ORDER BY B1.date
LIMIT 1) as prev_balance
FROM balanceHistory as b0
WHERE customer_id = 123;
在Symfony中,我可以编写一个自定义查询,一旦我更改了每个帐户,就会获取该更改的相关先前更改;但这很昂贵,因为我在迭代许多物体。
我可以添加一个新属性,比如'previousChange',但不添加任何ORM信息,而不是搞乱任何ORM的东西?如果可以,一旦我像这样手动加入,我该如何访问这个属性?
答案 0 :(得分:1)
不,这实际上并不受支持,因为实体的水合作用只发生在映射的字段上。
您正在寻找的内容可能是Native SQL,它允许您使用DBMS供应商支持的方言运行此类复杂的子查询。
在Native SQL中,您可以向结果集添加scalar results。 这样,您仍然可以运行自定义查询,但在结果集中包含您想要的所有其他数据以及实体。
此外,从概念上考虑,此类数据不属于您的实体,因此请将其与您的实体分开。