2016-07-27 192 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