我们如何从 MikroORM 中的实体 class 内部填充(或加载)1:1 关系?

How can we populate (or load) a 1:1 relationship from inside a entity class in MikroORM?

只是一些简单的背景知识:我们有一个 Menu 实体,它有一个 1:1 with MenuActiveHours 实体。 MenuActiveHours 包含有关菜单在一周的所有 7 天内处于活动状态的时间的信息。

{
    "monday": "1200-1400",
    "tuesday": "",
     ...
]

并且菜单实体有一个“状态”属性,它不是持久化的,它是通过检查是否有任何一天有几个小时的活动来计算的。

在 Menu.entity.ts 中我们有:

    @Property({
        persist: false,
      })
      get status() {
        if(this.activeHours) {
         return 
this.activeHours.getActiveHoursAsArray().filter((day) => day.hours != "").length > 0 ? MENU_BUILDER_STATUS.ACTIVE : MENU_BUILDER_STATUS.NOT_ACTIVE
        }    
    
        
        return "No status given"
      }

如果实际填充了“activeHours”实体,则此方法工作正常。但它不是,在我们的例子中,我们也不能在服务中填充它。因此,例如,如果它是一个 1:M,我们可以只 .loadItems() 然后 getitems() 并加载它,但我似乎无法弄清楚如何在实体中加载 1:1。

简单地说:我们如何在实体内的函数内加载 1:1 关系?我是否试图从错误的角度设置状态,也许应该改用拦截器之类的东西?

加载内容是异步操作,因此您不能在 getter.

中执行此操作

要加载实体,您可以执行 wrap(entity).init()。或者,您也可以使用具有 load() 方法的 Reference 包装器。

https://mikro-orm.io/docs/entity-references#better-type-safety-with-referencet-wrapper