2016-07-27 7 views
-2

私は、1つまたは複数の「カテゴリ」を持つ「リスティング」エンティティを持っています。 各「カテゴリ」には0個以上の「フィールド」があります。各「フィールド」には1つ以上の「カテゴリ」があります。 "リスト"の各 "カテゴリ"の "フィールド"ごとに "値"を追加したいと思います。ここでDoctrine多対多リレーション

は、既存の関係である:ここでは

Listing <--1:N--> ListingCategory <--N:1--> Category 
Category <--1:N--> CategoryField <--N:1--> Field 

は問題関係である:ここでは

Listing <----> Category <----> Field <--X--> Value 

は、教義のエンティティである: ...

class Listing 
{ 

    /** 
    * 
    * @ORM\ManyToMany(targetEntity="Category", inversedBy="listings") 
    * @ORM\JoinTable(name="listing_category", 
    *  joinColumns={@ORM\JoinColumn(name="listing_id", referencedColumnName="id", onDelete="CASCADE")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")} 
    *) 
    **/ 
    private $categories; 

...

class Category 
{ 

    /** 
    * @ORM\ManyToMany(targetEntity="Listing", mappedBy="categories") 
    **/ 
    private $listings; 


    /** 
    * @ORM\ManyToMany(targetEntity="Field", mappedBy="categories") 
    */ 
    private $fields; 

...

class Field 
{ 
    /** 
    * @ORM\ManyToMany(targetEntity="Category", inversedBy="fields") 
    * @ORM\JoinTable(name="category_field", 
    *  joinColumns={@ORM\JoinColumn(name="field_id", referencedColumnName="id", onDelete="CASCADE")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")} 
    *) 
    **/ 
    private $categories; 

...

class Value 
{ 

    //What should be the relations? 

使用事例:

  • カテゴリ1は、フィールド1
  • Listing1は、フィールド1のための範疇と値1を持っています
  • Li sting2には、Field1のCategory1とValue2があります。
+0

この質問が匿名でコメントやコメントなしで投票された理由を知ることができますか?絶対に建設的ではない。 – Tsounabe

答えて

0

私は解決策を見つけました:多対多の関係を複合キーとの「1対多対多対1」関係に分割します。

Listing <--1:N--> ListingCategory <--N:1--> Category 
Category <--1:N--> CategoryField <--N:1--> Field 
CategoryField <--1:N--> Value <--N:1--> ListingCategory 
0

各フィールドに1つの値があり、各値に1つのフィールドがある場合、その関係はOneToOneになります。

各フィールドが複数の値を持つことができる場合、リレーションシップはフィールドから値へのOneToManyと値からフィールドへのManyToOneになります。

これとは別に、Valueはフィールドエンティティの変数である可能性があるため、このデザインは疑わしいようです。

+0

各項目は同じ項目に対して異なる値を持つことができるため、値は項目エンティティの変数に過ぎません。 例: - カテゴリ1にはフィールド1があります - リスト1にはフィールド1のカテゴリ1と値1があります。 - リスト2にはフィールド1のカテゴリ1と値2があります。 – Tsounabe

+0

1対多の関係に関する発言は明白です。 なぜ私の質問に投票するのかわかりません。それを正確に分析するなら、シンプルではないが広く普及しているスキーマであるため、役に立つと思います。 – Tsounabe

+0

私は何も投票しませんでした。私はあなたに答えを与えた – mike

関連する問題