Typescript Loopback4多对多关系,但在关系表中没有作为主键的额外id字段

Typescript Loopback4多对多关系,但在关系表中没有作为主键的额外id字段,typescript,strongloop,loopback,v4l2loopback,Typescript,Strongloop,Loopback,V4l2loopback,我正在为一个已经存在并使用过的数据库构建一个应用程序,该数据库具有多对多关系,如下所示: 表格用户: Id int主键 表格角色: Id int主键 表格用户角色: UserId int主键和用户的外键。Id RoleId int主键和Role.Id的外键 现在,我们的目标是在LoopBack4中实现多对多关系,我的重点是,模型必须至少包含一个id/pk属性: 我使用这个线程:构建应用程序,直到现在。但在该示例中,关系表中有一个额外的id字段。问题是,我不能更改表,因为数据库已经在使用,我必须

我正在为一个已经存在并使用过的数据库构建一个应用程序,该数据库具有多对多关系,如下所示:

表格用户:
Id int主键

表格角色:
Id int主键

表格用户角色:
UserId int主键和用户的外键。Id
RoleId int主键和Role.Id的外键

现在,我们的目标是在LoopBack4中实现多对多关系,我的重点是,模型必须至少包含一个id/pk属性:

我使用这个线程:构建应用程序,直到现在。但在该示例中,关系表中有一个额外的id字段。问题是,我不能更改表,因为数据库已经在使用,我必须使用它

因此,我的代码目前如下所示:

user.model.ts

从'@loopback/repository'导入{Entity,hasMany,model,property};
从“/user-role.model”导入{UserRole};
@模型({settings:{}})
导出类用户扩展实体{
@财产({
键入:“编号”,
id:是的,
要求:正确,
})
Id:编号;
//…所有其他属性。。。
@hasMany(()=>UserRole,{keyTo:'UserId'})
用户角色?:用户角色[];
构造函数(数据?:部分){
超级(数据);
}
}
导出接口用户关系{
//请在此处描述导航属性
}
导出类型UserWithRelations=用户和用户关系;
用户角色.model.ts

从'@loopback/repository'导入{belongsTo,Entity,model};
从“/User.model”导入{User};
从“/Role.model”导入{Role};
@模型({
设置:{},
名称:“用户角色”
})
导出类UserRole扩展实体
{
@belongsTo(()=>用户)
UserId:number;
@belongsTo(()=>角色)
RoleId:数字;
构造函数(数据?:部分)
{
超级(数据);
}
}
导出接口UserRoleRelations
{
//请在此处描述导航属性
}
导出类型UserRoleWithRelations=UserRole&UserRoleRelations;
user.repository.ts

从'@loopback/repository'导入{defaultcrudepository,Filter,Getter,HasManyRepositoryFactory,Options,repository};
从“../models”导入{User,UserRelations,UserRole,UserWithRelations};
从“../datasources”导入{MySqlDataSource};
从'@loopback/core'导入{inject};
从“/user-role.repository”导入{UserRoleRepository}”;
导出类UserRepository扩展了DefaultCrudepository
{
公共只读用户角色:HasManyRepositoryFactory;
建造师(
@inject('datasources.MySQL')数据源:MySqlDataSource,
@getter('UserRoleRepository')getUserRoleRepository:getter)
{
超级(用户、数据源);
this.UserRoles=this.createHasManyRepositoryFactoryFor('UserRoles',getUserRoleRepository);
}
异步查找(筛选器?:筛选器,选项?:选项):承诺
{
//防止杂耍者应用“包含”过滤器
//杂耍者不知道LB4的关系
const include=filter&&filter.include;
过滤器={…过滤器,包括:未定义};
const result=wait super.find(过滤器、选项);
const includeRelations=include?include.map(x=>x.relations):[];
//可怜的男人包含解析器,这应该由DefaultCrudepo处理
//并使用'inq'运算符在较少的数据库查询中获取相关角色
//这是一个临时实现,请参见
// https://github.com/strongloop/loopback-next/issues/3195
if(includeRelations.includes('Roles'))
{
等待Promise.all(result.map)(异步u=>
{
u、 UserRoles=wait this.UserRoles(u.Id).find();
}));
}
返回结果;
}
}

要将角色分配给用户,我必须做什么?据我所知,我需要建立许多关系。但是loopback cli由于上面的错误而中断,我不知道现在要做什么。

该表中必须有一些主键。你能用这个代替身份证吗?@Samarpan你是什么意思?dbtable的主键是一个组合键(UserId,RoleId)。我认为环回会抱怨没有id(pk)属性。它将不允许。该表中必须有一些主键。你能用这个代替身份证吗?@Samarpan你是什么意思?dbtable的主键是一个组合键(UserId,RoleId)。我认为环回会抱怨没有id(pk)属性。这是不允许的。