0

たとえば、顧客アカウントの残高の変化を時間の経過とともに保存しているとします。変更の金額をテーブル(フィールドはamount)に保存し、変更の日付(date)も保存します。

変更が1つあり、そのユーザーの以前の変更の量を取得したいとします(これはオブジェクトのプロパティではありません)。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

いいえ、これは実際にはサポートされていません。エンティティのハイドレーションはマップされたフィールドでのみ発生するためです。

探しているのはおそらくネイティブSQLです。これにより、DBMSベンダーがサポートする方言を使用してこのような複雑なサブクエリを実行できます。

ネイティブSQLでは、結果セットにスカラー結果を追加できます。そうすれば、カスタムクエリを実行できますが、エンティティとともに、必要なすべての追加データを結果セットに含めることができます。

また、概念的には、そのようなデータはエンティティに属していないため、エンティティから分離してください。

于 2013-03-18T23:06:06.553 に答える