我试图创建一个包含多个字段的索引,其中一个字段是另一个表的主键。但是,我得到了以下错误:
错误:索引"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;
}
当我生成这个实体并创建sql表(没有索引)时,我将player_id
视为列之一。但是看起来typeorm现在无法通过连接列关系识别player_id存在于实体中的索引。
发布于 2021-02-05 07:19:22
这是完全没有文档的,所以在我无意中发现正确的语法之前,它花了一些时间来玩。实际上,可以在索引定义中使用子属性:
@Index("player_id_UNIQUE", ["player.id", "period", "year"], { unique: true })
这样,在生成的SQL中,player.id
自动映射到player_id
:
CREATE UNIQUE INDEX "player_id_UNIQUE" ON "user_earning" ("player_id", "period", "year")
发布于 2021-11-24 11:41:30
您可以在player_id
实体中显式声明Earning
。您唯一需要做的更改是添加
@Column()
player_id: number
在player
定义之前。
通过这种方式,TypeORM将player_id
识别为一个有效列,您可以在@Index或@Unique定义中使用它。
这是记录在案的行为:https://typeorm.io/#/relations-faq/how-to-use-relation-id-without-joining-relation
发布于 2021-06-28 17:50:05
@Index(["player.id", "period", "year"])
或者就这么做!
https://stackoverflow.com/questions/62373766
复制相似问题