首页 > 解决方案 > 教义实体设计 - 关联

问题描述

我正在开发一个计费系统,我的设计如下。在 Doctrine 中创建关系时我遇到了一些挑战,所以我想知道这是否是最好的方法,以及是否有更好的方法。

我正在跟踪费用,以及针对这些费用的信用和付款。

我有两张桌子:transactiontransaction_amount

Charge,实体继承自(单表继承) Credit,表示事务类型、状态以及是否删除。与 a连接并保存交易金额(所有行相加 - 例如,如果有三条记录与一笔费用交易相关联,一条金额为 100 美元,另一条为 50 美元,另一条 - 25 美元,则费用为金额为 $100+$50-$25 = $125。)PaymentTransactionTransactionAmountManyToOneTransactionTransactionAmount

此外,TransactionAmount可以引用另一个费用(如果关联Transaction的是 aCreditPayment),表示付款/信用涵盖的费用。

transaction
id | type     | description    | status    | deleted
_____________________________________________________
1    charge     coke             completed   0
2    payment    credit card      completed   0
3    credit     test             completed   1
4    payment    ach              pending     0


transaction_amount
id | transaction_id | referenced_charge_id | amount
_____________________________________________________
1    1                NULL                   100
2    1                NULL                   50
3    1                NULL                   -25
4    2                1                      50
5    3                1                      75
6    4                1                      75

Charge实体上,我需要有方法,getChargeAmount()这些方法只是所有关联TransactionAmount记录的总和,但我还需要知道getCompletedPaymentAmount()andgetPendingPaymentAmount()getCreditAmount()

这更加困难,因为我需要通过 加入TransactionAmount实体referenced_charge_id,但随后我需要按关联Transaction数据进行过滤。例如,如果信用交易被标记为已删除,或者付款状态为待处理。

在原始 SQL 中,这很容易,因为我可以加入,但在 Doctrine 中,这很困难,因为我需要getCreditAmount()返回所有关联的TransactionAmount记录,然后我需要循环并过滤掉已删除的记录,等等。

有没有更好的办法?

标签: phpmysqlsymfonydoctrine-ormdoctrine

解决方案


推荐阅读