【问题标题】:Add foreign key index Loopback 4 MySQL添加外键索引 Loopback 4 MySQL
【发布时间】:2020-05-17 12:55:28
【问题描述】:

我是 Loopback 4 的新手

我关注this tutorial 开始,一切正常。

我尝试使用 MySQL 数据库创建自己的模型 Category 和 SubCategory,具有一对多关系(一个类别有许多子类别),我注意到它确实在子类别表 (categoryId) 中创建了一个字段,但是外部缺少关键索引。

有人可以帮忙吗?

【问题讨论】:

    标签: mysql loopback4


    【解决方案1】:

    LoopBack 4 不会隐式添加外键约束。这是为了允许弱跨数据源关系(例如 PostgreSQL 和 Oracle 之间的关系)。

    因此,连接器有责任提供一个接口来定义这些约束。然而,这意味着不同连接器之间没有一致的接口。有一个 open issue 来跟踪这个。

    以 MySQL 为例:

     @model({
      settings: {
        foreignKeys: {
          categorySubCategoryFK: {
            name: 'categorySubCategoryFK',
            entity: 'Category',
            entityKey: 'id',
            foreignKey: 'categoryId',
          },
        },
      },
    })
    

    如果使用自动迁移(不应在生产中使用它!),则需要更新 migrate.ts 以定义模式的显式排序:

    await app.migrateSchema({
      existingSchema,
      models: ['Category', 'SubCategory'],
    });
    

    进一步阅读

    【讨论】:

      【解决方案2】:

      找到答案here,除了将设置添加到@model注解,像这样

       @model({
          settings: {
          foreignKeys: {
            categorySubCategoryFK: {
              name: 'categorySubCategoryFK',
              entity: 'Category',
              entityKey: 'id',
              foreignKey: 'categoryId',
            },
          },
        },
      })
      

      您必须更改以指定应在 migrate.ts 中创建的顺序表并更改此

      await app.migrateSchema({existingSchema});
      

      到这里

      await app.migrateSchema({
          existingSchema,
          models: ['Category', 'SubCategory'],
        });
      

      更多详情here

      【讨论】:

        【解决方案3】:

        Loopback 4 在模型上创建关系,而 Api 不在数据库上。因此它不会反映在您的 mysql 数据库中

        【讨论】:

          猜你喜欢
          • 2010-11-01
          • 1970-01-01
          • 2015-05-12
          • 1970-01-01
          • 2019-03-15
          • 2011-07-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多