0

私は自分の古い手作りアプリを CakePHP 2.0 に書き直していますが、この古くて繰り返されるモデル設計のジレンマに出くわします。

これはターゲット デザインです。

  • 注文には多くの OrderEntries があります
  • OrderEntry にはフィールド [amount, type] があります
  • ProductEntry は、フィールド [product_id、quantity、weight] で 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 つの関連付けは、非識別にする必要があります。より正確に言うと、1 つの OrderEntry レコードは、3 つの子モデルのうちの 1 つとのリレーションを 1 つだけ持つことができます。

これは OrderEntry を Order と 3 つの XxxEntry モデルすべての間の結合テーブルとして使用することで実現できますが、これは order_entries テーブルに 3 つの外部キー フィールドが必要であることを意味します。

  • product_entry_id
  • shipping_entry_id
  • discount_entry_id

これはこれまでのところ最善の解決策ですが、理想的ではありません。1 つのエントリが多くの注文に関連付けられている可能性があり、エラーになる可能性があるからです。また、1 つの joinTable は 3 つの外部キー (したがって 3 つの関連付けられたモデル) を保持していますが、これは「NOT NULL」にすることはできません。

結論として、独自のテーブルを持ついくつかの異なるモデルによって拡張される基本モデルを持つためのベスト プラクティスは何ですか?

4

1 に答える 1

0

これがあなたが探しているものかどうかはわかりませんが、一見の価値がある Cake Entity プラグインがあります: https://github.com/kanshin/CakeEntity

于 2012-05-09T02:51:52.973 に答える