2016-07-27 99 views
-2

我有一個「上市」實體有一個或多個「類別」。 每個「類別」都有零個或多個「字段」。每個「字段」都有一個或多個「類別」。 我想爲「清單」中每個「類別」的每個「字段」添加一個「值」。主義多對多關係

這是現有的關係:

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有一個組別和字段1一值1
  • 李sting2具有Field1的Category1和Value2
+0

我可以知道爲什麼這個問題沒有任何評論和匿名投票。絕對不是建設性的。 – Tsounabe

回答

0

我發現了一個解決方案:將多對多關係分解爲與複合關鍵字的「一對多和多對一」關係。

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

如果每個字段有一個值,每個值有一個字段,則該關係爲OneToOne。

如果每個字段可以有多個值,則關係將從字段到值的OneToMany和從值到字段的ManyToOne。

除此之外,該設計看起來很可疑,因爲值可能只是Field實體中的一個變量。

+0

Value不能只是Field實體中的一個變量,因爲每個列表對於同一個字段可以具有不同的值。ex: - 類別1有一個字段1 - 列表1具有Field1的Category1和Value1 - 列表2具有Field1的Category1和Value2 – Tsounabe

+0

您對一對多關係的評論很明顯。 我不明白你爲什麼投下我的問題。如果你仔細分析它,我認爲你會發現它很有用,因爲它不是一個簡單但是廣泛的模式。 – Tsounabe

+0

我沒有投下任何東西。我給你一個答案 – mike