nodejs sequelize hasOne ассоциация не работает - PullRequest
0 голосов
/ 06 января 2020

в моем приложении nodejs, где я использую sequelize для доступа к базе данных, у меня есть несколько таблиц (Продукты, Пользователи, Корзины, CartItems)

, и между ними существует эта связь

Product.belongsTo(User, { constraints: true, onDelete: 'CASCADE' });
User.hasMany(Product);
User.hasOne(Cart);
Cart.belongsTo(User);
Cart.belongsToMany(Product, { through: CartItem });
Product.belongsToMany(Cart, { through: CartItem });

как видите, у пользователя может быть только одна корзина, но там, где я использую createCart (); функция может делать более одной тележки

sequelize
// .sync({ force: true })
    .sync()
    .then(result => {
        return User.findByPk(1);
        // console.log(result);
    })
    .then(user => {
        if (!user) {
            return User.create({ name: 'Max', email: 'test@test.com' });
        }
        return user;
    })
    .then(user => {
        // console.log(user);
        return user.createCart();
    })
    .then(cart => {
        app.listen(4000);
    })
    .catch(err => {
        console.log(err);
    });

этот код находится в моем приложении. js файл, и каждый раз, когда сервер перезагружается, он проверяет, нет ли пользователя, который это делает, но createCart (); то, что sequelize должно обрабатывать это, чтобы не было более одной корзины для каждого пользователя, это не работает правильно, и каждый раз, когда сервер перезагружается, он делает другую корзину для пользователя

1 Ответ

0 голосов
/ 07 января 2020

Является ли идентификатор пользователя уникальным ключом или первичным ключом в таблице корзины? я думаю, что это должно быть, и ваши ключи должны быть определены в этих отношениях, я думаю ... что-то вроде этого ..

User.hasOne (Cart, {as: 'Cart', sourceKey: 'id', foreignKey: 'user_id'}); Cart.belongsTo (Пользователь, {as: 'CartOwner', sourceKey: 'user_id', foreignKey: 'id'});

...