数据库中未显示多对多关系

时间:2020-03-22 23:26:28

标签: typescript nestjs typeorm

早上好!

这是我的代码,问题写在代码下方 这是用户可以订阅项目

的多对多关系

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,在整个底部,您几乎可以看到相同的代码。

1 个答案:

答案 0 :(得分:1)

鉴于您希望userIditemId为其表的外键(分别为UserItem),则不应将它们定义为主键。在SubscriptionEntity上,只有一个自动生成的ID作为主键。

但是,如果要对用户强制订购某项商品,则可以使用Unique constraint,例如:@Unique(["user", "item"])