2010-05-12 27 views
0

我正在制定一個跟蹤客戶訂單的系統。每個訂單將有三個地址;主要聯繫人地址,帳單地址和送貨地址。我不希望在這三個地址的訂單表中有列,我想從一個單獨的表中引用它們,並且有一些方法來枚舉該條目,以便我可以確定該尋址是主要的,運輸還是計費。在AddressType的地址表中創建一個列並枚舉該列或者創建另一個表 - AddressTypes - 它定義地址枚舉並鏈接到該表是否有意義?如何在CakePHP中處理具有多個地址的客戶

我發現其他問題涉及到這個話題,那就是我採用我的模型的地方。我遇到的問題是將其納入CakePHP約定中。我一直在努力內化「BelongsTo」關係的方向 - 文檔狀態的方式讓我感覺倒退。

任何幫助,將不勝感激,

謝謝!

+0

我同意'belongsTo'關係的極性在查找表(這就是你正在談論的和'address_types'表)的情況下會感到尷尬和顛倒。一個'Address'在自然語言中並不真正屬於'AddressType',但它具有足夠的技術意義,我能夠克服它。雖然這是一個奇怪的地方,它的學習曲線。 – 2010-05-12 11:41:51

回答

0

表1:address_types(ID,姓名,活躍)

表2:顧客(ID,姓名,活動等)

表3:地址(ID,address_type_id,CUSTOMER_ID,國家,城市,街道等)

這樣,客戶可以擁有任意數量的地址。如果您需要添加新的地址類型,則不得更改客戶或地址表。

+0

活動列是否表示當前應該使用的地址? – Ryan 2010-05-12 23:47:07

+0

可選的「活動」列是布爾值,表示當前有效(非過時)的地址類型。 F.ex.,如果您不想在應用程序中使用「工作地址」類型,但是存在與您不想從數據庫中刪除的地址類型相對應的記錄。 – bancer 2010-05-13 09:05:30

1

你現在就在。你也可以這樣做,這取決於你想要規範化數據庫的程度。就我個人而言,我會使用AddressType模型,它可以讓您靈活地隨意添加和刪除地址類型。

如果您希望它更簡單,那麼我只需在Address模型中使用ENUM()字段。

1

我更喜歡將hasOne,hasMany和hasAndBelongsToMany作爲三種真正的關係類型。

belongsTo關係只是爲了做前兩個(hasOne/Many)做的相反。

如果你看看this diagram,你會注意到hasOne/belongsTo和hasMany/belongsTo的配對。

此外,請注意,「belongsTo」型號是存儲外鍵的型號(例如address_type_id)。

所以在你的情況下,由於地址類型hasMany地址(即你可以有許多家庭地址),那麼地址belongsTo AddressType(即每個地址需要一個address_type_id)。