首页 > 解决方案 > 多对多关系未显示在数据库中

问题描述

早上好!

这是我的代码,问题写在代码下面 这是一个多对多关系,用户可以订阅项目

user.entity.ts

@Entity("user")
export class UserEntity {

    @PrimaryGeneratedColumn('uuid')
    id: string;

    @Column({
        type: 'varchar',
        length: 50,
        unique: true,
    })
    username: string;

    @Column('text')
    password: string;

    @Column('text')
    role: string;

    @OneToMany(type => SubscriptionEntity, subscriptionEntity => subscriptionEntity.user)
    subscription: SubscriptionEntity[];
}

item.entity.ts

@Entity("item")
export class ItemEntity {

    constructor() {}

    @PrimaryGeneratedColumn() id: number;

    @Column('text') name: string;

    @Column('text') description: string;

    @Column('decimal') price: number;

    @Column('text') picture: string;

    @OneToMany(type => SubscriptionEntity, subscriptionEntity => subscriptionEntity.item)
    subscription: SubscriptionEntity[];
}

subscription.entity.ts

@Entity("subscription")
export class SubscriptionEntity {

    @PrimaryColumn() userId: string;
    @PrimaryColumn() itemId: number;

    @ManyToOne(type => UserEntity, user => user.subscription)
    @JoinColumn({name: "userId"})
    user: UserEntity;

    @ManyToOne(type => ItemEntity, item => item.subscription)
    @JoinColumn({name: "itemId"})
    item : ItemEntity;
}

问题是我的关系/外键没有显示在我的数据库中:

desc subscription

+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| userId | varchar(255) | NO   | PRI | NULL    |       |
| itemId | int(11)      | NO   | PRI | NULL    |       |
+--------+--------------+------+-----+---------+-------+

我真的看不出那里的问题。我密切关注这个LINK,在完整的底部你可以看到几乎相同的代码。

标签: typescriptnestjstypeorm

解决方案


鉴于您想要userIditemId成为他们表的外键(UserItem分别),您不应该将它们定义为主键。就SubscriptionEntity只有一个自动生成的 ID 作为主键。

但是,如果您想对用户强制执行单个项目订阅,则可以使用唯一约束,例如:@Unique(["user", "item"])


推荐阅读