【问题标题】:How to make unique constraint on ONE to MANY relationship?如何对 ONE to MANY 关系进行唯一约束?
【发布时间】:2019-07-09 19:11:49
【问题描述】:

我有两个实体:projectactor

export abstract class BaseEntityModel {
  @PrimaryGeneratedColumn()
  id: number;
}

@Entity()
export class Project extends BaseEntityModel {
    @Column()
    title: string;

    @OneToMany(type => Actor, actor => actor.project)
    @JoinColumn()
    actors: Actor[];
}

@Entity()
export class Actor extends BaseEntityModel {
    @Column({unique: true}) 
    title: string;

    @ManyToOne(type => Project, project => project.actors)
    project: Project;
}

我希望每个项目都有唯一的演员头衔,但不是跨数据库。

好的

projects: [
  {
    title: "webapp",
    actors: [
      {
        title: "dev"
      }
    ]
  },
  {
    title: "json-parser",
    actors: [
      {
        title: "dev"
      },
      {
        title: "target"
      }
    ]
  }
]

不行

projects: [
  {
    title: "webapp",
    actors: [
      {
        title: "dev"
      },
      {
        title: "dev"
      }
    ]
  },
  {
    title: "json-parser",
    actors: [
      {
        title: "dev"
      },
      {
        title: "target"
      }
    ]
  }
]

@Column({unique: true}) 在表中作为唯一的工作,这不是我想要的。还有类装饰器@Unique(['title']),不过好像也是这样。

我可以使用 TypeORM 中的某些东西吗,或者我是否必须检查自己的 actor.title 是否已经存在于项目中。为了避免在同一个项目中重复actor.title。同时保持在整个数据库中拥有多个相同actor.title 的可能性?

请注意,Actor 实体不应在 projects 之间共享(没有多对多关系)。

【问题讨论】:

    标签: database postgresql orm nestjs typeorm


    【解决方案1】:

    @Unique(['title', 'project']) 类装饰器添加到Actor 似乎是我想要的,请注意我已经以某种方式“损坏”了我的数据库,并且只有在删除/创建它之后迁移才能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      相关资源
      最近更新 更多