我想建立一个餐饮套餐,在那里我可以设计餐点,并在一周内将它们与不同的餐点联系起来。 (早餐或晚餐从1-7起,为期7天)
我最初的想法是多对多的关系
计划A (不要认为它会起作用)
表:(例如)
meals:
id
name
package:
id:
name:
meal_package:
meal_id
package_id
calendar_code: (enum of {1D, 2D .. 7D, 1B, 2B .. 7B})
类:(作为例子)
class Meal extends Model {
public function packages() {
return $this->belongsToMany(Package::class)->withPivot('calendar_code');
}
}
class Package extends Model {
public function meals() {
return $this->belongsToMany(Meal::class)->withPivot('calendar_code');
}
}
但是,附加和分离这些将更加困难..典型的多对多将不会有相同的2个实体相互链接不止一次,是吗?
我正在使用Laravel 5.4 ..
我愿意接受有关其他方法的建议。
我的另一个想法是改变它。
计划B (不要认为它是最佳的......)
表:(例如)
meals:
id
name
package:
id:
name:
meal_package:
meal_id
package_id
calendar_code: (enum of {1D, 2D .. 7D, 1B, 2B .. 7B})
类:(作为例子)
class Meal extends Model {
public function package() {
return $this->hasMany(Package::class);
}
}
class Package extends Model {
public function d1_meal() {
return $this->belongsTo(Meal::class);
}
public function d2_meal() {
return $this->belongsTo(Meal::class);
}
...
}
谢谢!
答案 0 :(得分:0)
我为你做了一点ERD。
首先,也许下次尝试使用更好的术语:
"我想建立一个餐饮套餐,在那里我可以设计餐点并在一周内将它们与不同的餐点联系起来"
会更好地翻译成:
"我希望有一个菜单,其中包含可在一周内重复使用的多餐。"
术语在业务流程中非常重要,在编码时更为重要。
它使编码方式更易于理解
一本好书就是:'罗伯特塞西尔马丁的清洁编码'
现在讨论这个问题:
-Menuperiod有多个菜单
- 菜单属于菜单周期[X]
- 菜单由多餐组成
- 用餐可以在多个菜单中
[X]菜单周期有一个开始和结束日期,但它只是一个菜单的集合。它不一定必须是一周,它可以是2周,几天等等。(例如圣诞节时间,事件等) 如果需要未来的功能,这种设置可以提高性能。
菜单在特定日期发生,我们使用日期&该日期需要在其MenuPeriod的startdate和enddate之间(与menuperiodid(FK)相关联)。这发生在您的业务逻辑中。此设置还可以更轻松地将周菜从一周复制到另一周。
菜单出现在早餐(早餐),中午(午餐)或晚上(晚餐)。
示例:周二早餐的菜单包含3餐(培根和鸡蛋,羊角面包和沙拉)。
但是这种设置使得复制菜单也变得更加容易。例如:每天早上我们都有培根和鸡蛋
此外,餐点可以在特定持续时间的特定持续时间的多个菜单中。
所以,如果你想像披萨周或其他什么一样,请打电话给我。
希望这有帮助!
PS:对于实际的collumntypes,我把它留给你。
menuperiod也有一个名称,除非你想命名你的菜单周期,例如' chickenweek'或者着名的“比萨饼周刊”。但如果它是一个纯日历,你可以打印出你的开始和结束日期作为字符串。