2016-02-04 78 views
0

我有这样的场景:

enter image description here学说OneToOne关系 - 唯一约束



实体MealListDay是有一天,其中有六餐(实体膳食)。现在我使用OneToOne关系。但有问题,因为更多的日子不能有相同的实体餐饮 - 错误:独特的约束。我知道,实体Meal在OneToOne关系中必须是唯一的,但有没有解决方案只使用这两个表?

有什么想法?谢谢。

实体MealListDay

/** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    * @var integer 
    */ 
    protected $id; 

    /** 
    * @ORM\OneToOne(targetEntity="Meal", cascade={"persist"}) 
    * @ORM\JoinColumn(onDelete="SET NULL") 
    * @var Meal 
    */ 
    protected $elevenses; 

    /** 
    * @ORM\OneToOne(targetEntity="Meal", cascade={"persist"}) 
    * @ORM\JoinColumn(onDelete="SET NULL") 
    * @var Meal 
    */ 
    protected $soup; 

    /** 
    * @ORM\OneToOne(targetEntity="Meal", cascade={"persist"}) 
    * @ORM\JoinColumn(onDelete="SET NULL") 
    * @var Meal 
    */ 
    protected $mainMeal; 

    /** 
    * @ORM\OneToOne(targetEntity="Meal", cascade={"persist"}) 
    * @ORM\JoinColumn(onDelete="SET NULL") 
    * @var Meal 
    */ 
    protected $sideDish; 

    /** 
    * @ORM\OneToOne(targetEntity="Meal", cascade={"persist"}) 
    * @ORM\JoinColumn(onDelete="SET NULL") 
    * @var Meal 
    */ 
    protected $drink; 

    /** 
    * @ORM\OneToOne(targetEntity="Meal", cascade={"persist"}) 
    * @ORM\JoinColumn(onDelete="SET NULL") 
    * @var Meal 
    */ 

    protected $nosh; 

实体餐:

/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue 
* @var integer 
*/ 
private $id; 

/** 
* @ORM\Column(type="string", length=150) 
*/ 
protected $name; 

/** 
* @ORM\Column(type="string", length=20) 
*/ 
protected $type; 

/** 
* @ORM\Column(type="simple_array", nullable=true) 
*/ 
protected $allergens; 

回答

0

我必须实现关系M:N,有结果。 我知道,属性过敏原不在1NF,但这些只是数字,这些数字与特定的过敏原名称和描述相关联,这些名称和描述在课堂上是静态定义的。

enter image description here

0

你的mmodel具有第一范式问题。

尝试以下操作:

MealListDay - ID - dateOffered

MealOffering - MealListDayID(FK到MealListDay) - MealId(FK到餐)

膳食 - ID - 名称

BTW包括膳食中的过敏原可能会导致1N F问题