【发布时间】:2020-05-17 12:55:28
【问题描述】:
我是 Loopback 4 的新手
我关注this tutorial 开始,一切正常。
我尝试使用 MySQL 数据库创建自己的模型 Category 和 SubCategory,具有一对多关系(一个类别有许多子类别),我注意到它确实在子类别表 (categoryId) 中创建了一个字段,但是外部缺少关键索引。
有人可以帮忙吗?
【问题讨论】:
我是 Loopback 4 的新手
我关注this tutorial 开始,一切正常。
我尝试使用 MySQL 数据库创建自己的模型 Category 和 SubCategory,具有一对多关系(一个类别有许多子类别),我注意到它确实在子类别表 (categoryId) 中创建了一个字段,但是外部缺少关键索引。
有人可以帮忙吗?
【问题讨论】:
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'],
});
【讨论】:
找到答案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
【讨论】:
Loopback 4 在模型上创建关系,而 Api 不在数据库上。因此它不会反映在您的 mysql 数据库中
【讨论】: