我可以向我的数据库表中不是字段的对象添加属性吗?

时间:2013-03-18 21:46:02

标签: symfony doctrine-orm

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

1 个答案:

答案 0 :(得分:1)

不,这实际上并不受支持,因为实体的水合作用只发生在映射的字段上。

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

在Native SQL中,您可以向结果集添加scalar results。 这样,您仍然可以运行自定义查询,但在结果集中包含您想要的所有其他数据以及实体。

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