0

マルチストアソリューションである必要があるEコマースソリューションを作成しています。製品とその機能の間の関連付けを作成している間、私は真剣に立ち往生しています。マルチストアソリューションであるため、製品ごとに動的な機能の可能性が必要です。Product、FeatureKind、FeatureValueの3つのエンティティを思いつきました。

  • FeatureKindには、サイズ、色、スタイルなどの基本的な機能名があります。また、FeatureValueエンティティへのM:M接続もあります
  • FeatureValueには、Small、Medium、Green、Red、Blue、Full- SleevedなどのFeatureKindの値が含まれていることは明らかです。
  • 製品エンティティは、M:MアソシエーションでFeatureKindに接続されています。

このタイプの構造でいくつか問題があります。

  • サイズが小さい製品がある場合、オプションに中サイズも表示されないはずです。製品の色が緑のみの場合、赤や緑なども表示されないようにする必要があります。
  • 次に、小さいサイズの緑と大きいサイズの赤でのみ入手可能な製品がある場合はどうなりますか。それはどのようにうまくいくでしょうか?

構造とアーキテクチャの両方を変更する必要があると確信しています。幸い、プロジェクトはSymfony2にあり、作成する製品バンドルしかありません。

ここにエンティティを投稿できれば幸いですが、私の問題はコードではなく概念です。あなたがそれを見る必要があるならば、ただコメントしてください、そして、私は質問を編集します。

4

1 に答える 1

0

ユース ケースに基づいて、Feature エンティティは STI である必要があります。フィーチャー エンティティから分岐するさまざまなエンティティを作成して、色、サイズ、ボリュームなどのさまざまなフィーチャーをマップできます。Product エンティティと Feature エンティティを M:M 関係で接続するには、結合テーブルを作成する必要があります。

STI の詳細については、こちらをご覧ください。

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"feature" = "Feature", "color" = "Color", "size" = "Size"})
 */
class Feature
{
    // ...
}

/**
 * @Entity
 */
class Color extends Feature
{
    // ...
}
于 2012-09-10T20:15:55.577 に答える