我正在将我的一个旧的手工制作的应用程序重写为 CakePHP 2.0,我遇到了这个旧的、不断重复的模型设计困境。
这是目标设计:
- Order 有很多 OrderEntries
- OrderEntry 有字段 [数量,类型]
- ProductEntry 使用字段 [product_id、数量、重量] 扩展 OrderEntry
- ShipmentEntry 使用字段 [total_weight、country_id、city、address 等] 扩展 OrderEntry
- DiscountEntry 使用字段 [discount_code、parent_order_id、active 等] 扩展 OrderEntry
编辑:从根本上简化问题以代替新知识
所以基本上,我需要 Cake 的这个模型结构:
Order 1:m OrderEntry
OrderEntry 1:1 ProductEntry
OrderEntry 1:1 ShipmentEntry
OrderEntry 1:1 DiscountEntry
最后 3 个关联应该是非识别性的。更准确地说,一个 OrderEntry 记录可以与三个子模型之一恰好有一种关系。
这可以通过使用 OrderEntry 作为 Order 和所有 3 个 XxxEntry 模型之间的连接表来实现,但这意味着 order_entries 表应该有 3 个外键字段:
- product_entry_id
- ship_entry_id
- discount_entry_id
这是迄今为止我最好的解决方案,但并不理想,因为一个条目可能与多个订单相关联,这将是一个错误。此外,一个 joinTable 持有 3 个外键(因此有 3 个关联模型),不能为“NOT NULL”,因为每条记录只应填充一个,而其他 2 个保持为空。
总而言之,拥有一个基本模型的最佳实践是什么,该模型由几个不同的模型用自己的表进行扩展?