php - 教义实体设计 - 关联
问题描述
我正在开发一个计费系统,我的设计如下。在 Doctrine 中创建关系时我遇到了一些挑战,所以我想知道这是否是最好的方法,以及是否有更好的方法。
我正在跟踪费用,以及针对这些费用的信用和付款。
我有两张桌子:transaction
和transaction_amount
Charge
,实体继承自(单表继承) Credit
,表示事务类型、状态以及是否删除。与 a连接并保存交易金额(所有行相加 - 例如,如果有三条记录与一笔费用交易相关联,一条金额为 100 美元,另一条为 50 美元,另一条 - 25 美元,则费用为金额为 $100+$50-$25 = $125。)Payment
Transaction
TransactionAmount
ManyToOne
Transaction
TransactionAmount
此外,TransactionAmount
可以引用另一个费用(如果关联Transaction
的是 aCredit
或Payment
),表示付款/信用涵盖的费用。
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
记录,然后我需要循环并过滤掉已删除的记录,等等。
有没有更好的办法?
解决方案
推荐阅读
- java - 如何使用序列化从 txt.datei 加载多个对象实例
- java - 我希望我的 Eclipse Java 套接字客户端接收可变数量或数据包
- python - 没有opencv的Python Camshift算法
- javascript - addTableRow 在模板中带有一个键和一个主题
- python - 在 Python 中绘制椭球体
- javascript - 错误类型错误:无法读取未定义的属性“pageIndex”
- javascript - JavaScript 调用堆栈中的变量如何在函数返回后仍可访问
- python - 如果我将对象的名称作为字符串并且在 python 中具有属性,如何访问对象的属性?
- pandas - 使用 pd.Series.str.contains 查找列中是否存在字符串
- date - 从纪元时间转换为 (dd/mm/yyyy) 日期格式