Как вставить данные в связи «многие ко многим» (Sequelize) - PullRequest
0 голосов
/ 02 мая 2020

Моя модель продукта:

const { Model, DataTypes } = require('sequelize');

class Product extends Model {
    static init(connection) {
        super.init({
            name: DataTypes.STRING,
            description: DataTypes.TEXT,
            purchase_price: DataTypes.DOUBLE,
            sale_price: DataTypes.DOUBLE
        }, {sequelize: connection});
    }

    static associate(models) {
        this.belongsToMany(models.Purchase, {
            foreignKey: 'product_id', through: 'products_purchases', as: 'purchases'
        });
    }
}

module.exports = Product;

Моя модель покупки:

const { Model, DataTypes } = require('sequelize');
const Product = require('../models/Product');

class Purchase extends Model {
    static init(connection) {
        super.init({
            request_number: DataTypes.STRING,
            datetime: {
                type: DataTypes.DATE,
                defaultValue: DataTypes.NOW
            },
                email: DataTypes.STRING,
            status: DataTypes.ENUM([
                'orderPlaced', 'paymentMade','paymentConfirmed', 'forwardedProduct','productReceived','orderCanceled'
            ])
        }, {sequelize: connection});
    }

    static associate(models) {
        this.belongsTo(models.User, {foreignKey: 'user_id', as: 'user'});
        this.belongsToMany(models.Product, {
            foreignKey: 'purchase_id', through: 'products_purchases', as: 'products'
        });
    }
}

module.exports = Purchase;

И, наконец, моя модель ProductPurchase: (Обратите внимание, что есть несколько дополнительных столбцов в таблица отношений)

const { Model, DataTypes } = require('sequelize');

class ProductPurchase extends Model {
    static init(connection) {
        super.init({
            product_value: DataTypes.FLOAT,
            product_quantity: DataTypes.INTEGER
        }, {
            sequelize: connection,
            modelName: 'products_purchases'
        });
    }

}

module.exports = ProductPurchase;

Я хочу вставить данные в таблицу закупки , а также в products_purchases . Я попытался сделать это, как показано ниже, но я не знаю, как отправить данные дополнительных столбцов из ProductPurchase:

    async store(req, res) {
        try {
            const { user_id } = req.params;
            const user = await User.findByPk(user_id);

            if (!user) {
                return res.status(400).json('User not found!');
            }

            // productsData = [{ productId, productPrice, quantity }];
            const { request_number, datetime, email, status, productsData } = req.body;
            const purchase = await Purchase.create({
                request_number, datetime, email, status, user_id
            });

            const productsIds = productsData.map(product => {
                return product.productId;
            });

            const products = await Product.findAll({
                where: {id: productsIds}
            });


            await purchase.addProduct(products);


            return res.json(products);
        } catch (error) {
            return res.status(500).json(error);
        }
    }

Кто-нибудь может мне помочь?

...