膳食日历-数据库模式-Laravel

膳食日历-数据库模式-Laravel,laravel,eloquent,relational-database,Laravel,Eloquent,Relational Database,我想建立一个膳食套餐,在那里我可以设计膳食,并将它们与一周中的不同膳食相关联。(早餐或晚餐从1-7开始,持续7天) 我最初的想法是多对多的关系 计划A(不要认为它会奏效) 表:(例如) 班级:(举例) 但是,连接和分离这些将更加困难。。一个典型的多对多不会有相同的两个实体相互链接不止一次,是吗 我用的是Laravel 5.4 我愿意接受关于其他方法的建议 我的另一个想法是这样改变它 计划B(不要认为它是最佳的……) 表:(例如) 班级:(举例) 谢谢大家! 我给你做了一个小ERD 首先,也许下次

我想建立一个膳食套餐,在那里我可以设计膳食,并将它们与一周中的不同膳食相关联。(早餐或晚餐从1-7开始,持续7天)

我最初的想法是多对多的关系

计划A(不要认为它会奏效)

表:(例如)

班级:(举例)

但是,连接和分离这些将更加困难。。一个典型的多对多不会有相同的两个实体相互链接不止一次,是吗

我用的是Laravel 5.4

我愿意接受关于其他方法的建议

我的另一个想法是这样改变它

计划B(不要认为它是最佳的……)

表:(例如)

班级:(举例)


谢谢大家!

我给你做了一个小ERD

首先,也许下次尝试使用更好的术语:

我想建立一个套餐,在那里我可以设计膳食,并将它们与一周中的不同膳食相关联

最好翻译成:

我想要一份包含多餐的菜单,可以在一周内重复使用

术语在业务流程中非常重要,在编码中更为重要

它使编码方式更易于理解

这方面的一本好书是:《罗伯特·塞西尔·马丁的干净编码》

现在谈谈有关问题:

  • Menuperiod有多个菜单
  • 菜单属于菜单超链接[X]
  • 菜单是由多种食物组成的
  • 一顿饭可以有多种菜单
[十] menuperiod有开始和结束日期,但它只是菜单的集合。不一定是一周,可以是两周,几天,等等。。(例如圣诞节时间、活动等)

如果将来需要功能,此设置将使其性能更高

菜单发生在特定的一天,我们使用一个日期&该日期需要在其菜单的起始日期和结束日期之间(与菜单的起始日期(FK)关联)。这发生在您的业务逻辑中。此设置还可以更轻松地将周菜单从一周复制到另一周

菜单出现在早上(早餐)、中午(午餐)或晚上(晚餐)

周二早餐的菜单上有三餐(培根和鸡蛋、牛角面包和沙拉)

但这种设置也使复制菜单更容易。每天早上我们都吃熏肉和鸡蛋

此外,一顿饭可以在多个菜单中指定时间

所以,如果你想做比萨饼周之类的事,打电话给我

希望这有帮助

PS:对于实际的列类型,我将由您决定


menuperiod也有一个名字,除非你想给你的menuperiod命名,比如“chickenweek”或著名的“pizzaweek”,否则这个名字是不必要的。但如果是纯日历,您可以将开始和结束日期打印为字符串。

谢谢您的回复!这给了我另一种思考=)@MartinDev的方法,我很高兴。如果它回答了您的问题,请将其标记为已接受答案。如果您有任何其他问题,请随时提问;)
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');
    }
}
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);
    }

    ...

}