0

例如,假设我正在存储客户帐户余额随时间的变化。我将更改的金额(字段为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 的东西吗?如果可以的话,一旦我像这样手动加入,我如何访问这个属性?

4

1 回答 1

1

不,这不是真正支持的,因为实体的水合仅发生在映射字段上。

您正在寻找的可能是Native SQL,它允许您使用 DBMS 供应商支持的方言来运行此类复杂的子查询。

在 Native SQL 中,您可以将标量结果添加到结果集中。这样,您仍然可以运行自定义查询,但在结果集中拥有您想要的所有其他数据以及您的实体。

此外,从概念上考虑,此类数据不属于您的实体,因此请将其与您的实体分开。

于 2013-03-18T23:06:06.553 回答