如何在CakePHP中处理具有多个地址的客户

时间:2010-05-12 00:09:26

标签: mysql database-design cakephp

我正在组建一个系统来跟踪客户订单。每个订单都有三个地址; a主要联系地址,账单地址和送货地址。我不希望在我的订单表中有三个地址的列,我想从一个单独的表中引用它们并有一些方法来枚举该条目,以便我可以确定该地址是主要的,运输的还是计费的。在AddressType的地址表中创建一个列并枚举它还是创建另一个表 - AddressTypes - 定义地址枚举和链接到该表是否有意义?

我找到了其他涉及这个主题的问题,这就是我采用我的模型的地方。我遇到的问题是将其纳入cakePHP约定。我一直在努力将BelongsTo关系形成的方向内化 - 文档的状态让我感觉倒退。

任何帮助将不胜感激,

谢谢!

3 个答案:

答案 0 :(得分:1)

你是现货。您可以这样做,具体取决于您希望规范化数据库的程度。就个人而言,我会使用AddressType模型,这使您可以随意添加和删除地址类型。

如果您希望它更简单,那么我会在地址模型中使用ENUM()字段。

答案 1 :(得分:1)

我更喜欢将hasOne,hasMany和hasAndBelongsToMany视为三种真实的关系类型。

belongsTo关系只是为了与前两个(hasOne / Many)所做的相反。

如果查看this diagram,您会注意到hasOne / belongsTo和hasMany / belongsTo的配对。

另请注意,“belongsTo”的模型是存储外键的模型(例如address_type_id)。

因此,在您的情况下,由于AddressType具有多个地址(即您可以拥有许多家庭地址),因此地址属于地址类型(即每个地址需要address_type_id)。

答案 2 :(得分:0)

表1:address_types(id,name,active)

表2:客户(id,name,active等)

表3:地址(id,address_type_id,customer_id,国家,城市,街道等)

这样客户可以拥有任意数量的地址。如果您需要添加新的地址类型,则不得更改客户或地址表。