Doctrine OneToOne 关系 - 唯一约束
Doctrine OneToOne relationship - unique constraints
我有这样的场景:
实体MealListDay是一天,有六餐(实体Meal)。现在我使用 OneToOne 关系。但是有问题,因为更多天不能有相同的实体餐 - 错误:唯一约束。我知道,实体 Meal 在 OneToOne 关系中必须是唯一的,但是是否有仅使用这两个表的解决方案?
有什么想法吗?谢谢
实体餐单日
/**
* @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;
您的 mmodel 存在第一范式问题。
尝试以下操作:
MealListDay
- ID
- 提供日期
MealOffering
- MealListDayID(FK 到 MealListDay)
- MealId(FK 到餐)
用餐
- ID
- 姓名
顺便说一句,在膳食中加入过敏原也可能会导致 1NF 问题
我必须执行关系M:N,有结果。
我知道,属性 过敏原不在 1NF 中,但这些只是数字,链接到在 class.
中静态定义的特定过敏原名称和描述
我有这样的场景:
实体MealListDay是一天,有六餐(实体Meal)。现在我使用 OneToOne 关系。但是有问题,因为更多天不能有相同的实体餐 - 错误:唯一约束。我知道,实体 Meal 在 OneToOne 关系中必须是唯一的,但是是否有仅使用这两个表的解决方案?
有什么想法吗?谢谢
实体餐单日
/**
* @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;
您的 mmodel 存在第一范式问题。
尝试以下操作:
MealListDay - ID - 提供日期
MealOffering - MealListDayID(FK 到 MealListDay) - MealId(FK 到餐)
用餐 - ID - 姓名
顺便说一句,在膳食中加入过敏原也可能会导致 1NF 问题
我必须执行关系M:N,有结果。 我知道,属性 过敏原不在 1NF 中,但这些只是数字,链接到在 class.
中静态定义的特定过敏原名称和描述