如何创建包含多个字段的唯一索引,其中一个字段是外键

Kay*_*Kay 18 sql node.js typeorm

我正在尝试创建一个包含多个字段的索引,其中一个字段是另一个表的外键。但是我收到以下错误:

错误:索引“player_id_UNIQUE”包含实体中缺少的列(收入):player_id

鉴于player_id是我加入的外键,我该如何处理这个问题

import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm";
import { PersonPlayer } from "./PersonPlayer";
import { Team } from "./Team";

    @Entity()
    @Index("player_id_UNIQUE", ["player_id", "period", "year"], { unique: true })
    export class Earning {

        @PrimaryColumn({length: 36})
        id: string;

        @Column({nullable: true})
        year: number;

        @Column({type: 'decimal', nullable: true})
        amount: number;

        @Column({nullable: true, length: 45})
        period: string;

        @ManyToOne(() => Team, {nullable: true})
        @JoinColumn({name: 'team_id'})
        team: Team;


        @ManyToOne(() => PersonPlayer, {nullable: true})
        @JoinColumn({name: 'player_id'})
        player: PersonPlayer;

        @Column({nullable: true, length: 45})
        dtype: string;

    }
Run Code Online (Sandbox Code Playgroud)

当我生成这个实体并创建 sql 表(没有索引)时,我将其视为player_id列之一。但看来 typeorm 现在无法通过 joincolumn 关系识别实体中存在的player_id 索引。

Vin*_*ele 23

这是完全没有记录的,所以我花了一些时间才偶然发现了正确的语法。您实际上可以在索引定义中使用子属性:

@Index("player_id_UNIQUE", ["player.id", "period", "year"], { unique: true })
Run Code Online (Sandbox Code Playgroud)

这样,player.id就会自动映射到player_id生成的 SQL 中:

CREATE UNIQUE INDEX "player_id_UNIQUE" ON "user_earning" ("player_id", "period", "year")
Run Code Online (Sandbox Code Playgroud)