2016-02-04 109 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問題