Postgresql 将typescript多对多关系模型数据与

Postgresql 将typescript多对多关系模型数据与,postgresql,typescript,many-to-many,sequelize.js,Postgresql,Typescript,Many To Many,Sequelize.js,我正在使用sequelize with library,并试图实现以下关系: 小队 @Scopes({ withPlayers: { include: [{model: () => User}] } }) @Table export default class Team extends Model<Team> { @AllowNull(false) @Column name: string; @BelongsToMany(() => U

我正在使用sequelize with library,并试图实现以下关系:

小队

@Scopes({
  withPlayers: {
    include: [{model: () => User}]
  }
})
@Table
export default class Team extends Model<Team> {

  @AllowNull(false)
  @Column
  name: string;

  @BelongsToMany(() => User, () => TeamPlayer)
  players: User[];
}
现在有两件事我做不到

1) 我想将
TeamPlayer
重命名为类似“会员”的名称;但不是通过更改类的名称 2)
TeamPlayer
的内容不应具有id,但我希望它包含团队的数据,例如:

{
  "firstName": "John",
  "lastName": "Doe"
  "membership": {
     "number": 32
 }
在上面的类中,我尝试将
TeamPlayer
类的作用域设置为仅在
TeamMember
包含中包含
number
,但没有效果


我曾经让
TeamPlayer
类直接成为
team
player
的成员,但该解决方案为
TeamPlayer
类添加了冗余的
id
,并且也没有防止团队中的重复成员身份。在这些情况下,我确实可以手动(=在代码中)防止重复,但这并不优雅。

我最终解决了这个问题,从
TeamPlayer
User
Team
,添加了一对多的关系,并通过添加两个带有
@ForeignKey
的字段,找到了使
teamId
+
userId
对唯一的方法,如下所示:

TeamPlayer.ts

@Table
export default class TeamPlayer extends Model<TeamPlayer> {

  @BelongsTo(() => Team)
  team: Team;

  @ForeignKey(() => Team)
  @PrimaryKey
  @Column
  teamId: number;

  @BelongsTo(() => User)
  user: User;

  @ForeignKey(() => User)
  @PrimaryKey
  @Column
  userId: number;

  @Column
  number: number;
}
@Table
export default class User extends Model<User> {

  @AllowNull(false)
  @Column
  firstName: string;

  @AllowNull(false)
  @Column
  lastName: string;

  @HasMany(() => TeamPlayer)
  teams: TeamPlayer[];
}
export default class Team extends Model<Team> {
  @AllowNull(false)
  @Column
  name: string;

  @HasMany(() => TeamPlayer)
  players: TeamPlayer[];
}
@表格
导出默认类TeamPlayer扩展模型{
@属于(()=>团队)
团队:团队;
@外键(()=>团队)
@主键
@纵队
teamId:编号;
@BelongsTo(()=>用户)
用户:用户;
@外键(()=>用户)
@主键
@纵队
userId:number;
@纵队
编号:编号;
}
User.ts

@Table
export default class TeamPlayer extends Model<TeamPlayer> {

  @BelongsTo(() => Team)
  team: Team;

  @ForeignKey(() => Team)
  @PrimaryKey
  @Column
  teamId: number;

  @BelongsTo(() => User)
  user: User;

  @ForeignKey(() => User)
  @PrimaryKey
  @Column
  userId: number;

  @Column
  number: number;
}
@Table
export default class User extends Model<User> {

  @AllowNull(false)
  @Column
  firstName: string;

  @AllowNull(false)
  @Column
  lastName: string;

  @HasMany(() => TeamPlayer)
  teams: TeamPlayer[];
}
export default class Team extends Model<Team> {
  @AllowNull(false)
  @Column
  name: string;

  @HasMany(() => TeamPlayer)
  players: TeamPlayer[];
}
@表格
导出默认类用户扩展模型{
@AllowFull(假)
@纵队
名字:字符串;
@AllowFull(假)
@纵队
lastName:string;
@有很多(()=>团队成员)
团队:团队成员[];
}
Team.ts

@Table
export default class TeamPlayer extends Model<TeamPlayer> {

  @BelongsTo(() => Team)
  team: Team;

  @ForeignKey(() => Team)
  @PrimaryKey
  @Column
  teamId: number;

  @BelongsTo(() => User)
  user: User;

  @ForeignKey(() => User)
  @PrimaryKey
  @Column
  userId: number;

  @Column
  number: number;
}
@Table
export default class User extends Model<User> {

  @AllowNull(false)
  @Column
  firstName: string;

  @AllowNull(false)
  @Column
  lastName: string;

  @HasMany(() => TeamPlayer)
  teams: TeamPlayer[];
}
export default class Team extends Model<Team> {
  @AllowNull(false)
  @Column
  name: string;

  @HasMany(() => TeamPlayer)
  players: TeamPlayer[];
}
导出默认类团队扩展模型{
@AllowFull(假)
@纵队
名称:字符串;
@有很多(()=>团队成员)
球员:团队球员[];
}

此解决方案允许我通过作用域控制包含的查询属性,并为我提供适当的对象输出。

我通过添加从
TeamPlayer
User
Team
的一对多关系来解决此问题,并通过添加两个带有
@ForeignKey
的字段,找到了使
teamId
+
userId
对唯一的方法,如下所示:

TeamPlayer.ts

@Table
export default class TeamPlayer extends Model<TeamPlayer> {

  @BelongsTo(() => Team)
  team: Team;

  @ForeignKey(() => Team)
  @PrimaryKey
  @Column
  teamId: number;

  @BelongsTo(() => User)
  user: User;

  @ForeignKey(() => User)
  @PrimaryKey
  @Column
  userId: number;

  @Column
  number: number;
}
@Table
export default class User extends Model<User> {

  @AllowNull(false)
  @Column
  firstName: string;

  @AllowNull(false)
  @Column
  lastName: string;

  @HasMany(() => TeamPlayer)
  teams: TeamPlayer[];
}
export default class Team extends Model<Team> {
  @AllowNull(false)
  @Column
  name: string;

  @HasMany(() => TeamPlayer)
  players: TeamPlayer[];
}
@表格
导出默认类TeamPlayer扩展模型{
@属于(()=>团队)
团队:团队;
@外键(()=>团队)
@主键
@纵队
teamId:编号;
@BelongsTo(()=>用户)
用户:用户;
@外键(()=>用户)
@主键
@纵队
userId:number;
@纵队
编号:编号;
}
User.ts

@Table
export default class TeamPlayer extends Model<TeamPlayer> {

  @BelongsTo(() => Team)
  team: Team;

  @ForeignKey(() => Team)
  @PrimaryKey
  @Column
  teamId: number;

  @BelongsTo(() => User)
  user: User;

  @ForeignKey(() => User)
  @PrimaryKey
  @Column
  userId: number;

  @Column
  number: number;
}
@Table
export default class User extends Model<User> {

  @AllowNull(false)
  @Column
  firstName: string;

  @AllowNull(false)
  @Column
  lastName: string;

  @HasMany(() => TeamPlayer)
  teams: TeamPlayer[];
}
export default class Team extends Model<Team> {
  @AllowNull(false)
  @Column
  name: string;

  @HasMany(() => TeamPlayer)
  players: TeamPlayer[];
}
@表格
导出默认类用户扩展模型{
@AllowFull(假)
@纵队
名字:字符串;
@AllowFull(假)
@纵队
lastName:string;
@有很多(()=>团队成员)
团队:团队成员[];
}
Team.ts

@Table
export default class TeamPlayer extends Model<TeamPlayer> {

  @BelongsTo(() => Team)
  team: Team;

  @ForeignKey(() => Team)
  @PrimaryKey
  @Column
  teamId: number;

  @BelongsTo(() => User)
  user: User;

  @ForeignKey(() => User)
  @PrimaryKey
  @Column
  userId: number;

  @Column
  number: number;
}
@Table
export default class User extends Model<User> {

  @AllowNull(false)
  @Column
  firstName: string;

  @AllowNull(false)
  @Column
  lastName: string;

  @HasMany(() => TeamPlayer)
  teams: TeamPlayer[];
}
export default class Team extends Model<Team> {
  @AllowNull(false)
  @Column
  name: string;

  @HasMany(() => TeamPlayer)
  players: TeamPlayer[];
}
导出默认类团队扩展模型{
@AllowFull(假)
@纵队
名称:字符串;
@有很多(()=>团队成员)
球员:团队球员[];
}
这个解决方案允许我通过作用域控制包含的查询属性,并提供适当的对象输出