@MrProper5050
Backend developer

Как работать с ассоциациями в sequelize в Nest.JS?

Делаю свой псевдо движок для магазина. В каждом магазине есть товары и пользователи, которые могут выставлять эти товары или покупать. Как мне сделать связь между пользователем, который выложил товар, и товаром?
Понимаю, что есть всякие @HasOne, @ForeignKey и так далее, но не понимаю как их вообще использовать и как потом изменять массив товаров у юзера.
Модель товара.
import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Model, PrimaryKey, Table, UpdatedAt } from "sequelize-typescript";
import { User } from "./user.model";

@Table({tableName:'goods'})
export class Goods extends Model<Goods>{

    
    @PrimaryKey
    @Column
    id: string;

    @AllowNull(false)
    @Column
    title: string;

    @AllowNull(false)
    @Column
    category: string;

    @AllowNull(false)
    @Column(DataType.JSON)
    info: any

    @AllowNull(false)
    @Column
    price: number;

    @AllowNull(false)
    @Column
    amount: number;

  
    @ForeignKey(() => User)
    @Column
    userId: any;

    @BelongsTo(() => User)
    user: User;

    @CreatedAt
    @Column
    createdAt: Date;

    @UpdatedAt
    @Column
    updatedAt: Date;
}

Модель пользователя.
import { Column, CreatedAt, DataType, HasMany, Model, PrimaryKey, Table, UpdatedAt } from "sequelize-typescript";
import { Goods } from "./goods.model";

@Table({tableName:'users'})
export class User extends Model<User>{

    @PrimaryKey
    @Column
    id: string;

    @Column
    username: string;

    @Column
    email: string;

    @Column(DataType.STRING(255))
    password: string;

    @Column
    role: string;

    @Column
    balance: number;

    @Column(DataType.ARRAY(DataType.JSON))
    purchasedGoods: any

    @HasMany(()=> Goods)
    myGoods: Goods[]

    @CreatedAt
    @Column
    createdAt: Date;

    @UpdatedAt
    @Column
    updatedAt: Date;
}
  • Вопрос задан
  • 3214 просмотров
Решения вопроса 1
YuriyVorobyov1333
@YuriyVorobyov1333
Software Developer
В товарах сделайте так:
@BelongsTo(() => User)
  user: User;

  @ForeignKey(() => User)
  @Column({
    type: DataType.STRING,
    allowNull: false,
  })
  userId: string;


В пользователях так:
@HasMany(() => Goods)
  userGoods: Goods[];


Потом напишите функцию добавления товаров и записывайте вместе в id юезра в соответсвующее поле, а когда выборку будете делать, то используйте include, если вам надо достать товары по юзеру или юзера по товарам
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы