首页 > 解决方案 > 加入续集

问题描述

我有以下数据库表:事件、用户和收藏夹。

一个事件可以被很多用户收藏,一个用户可以收藏很多事件。

最喜欢的表模式是:

CREATE TABLE favorites
(
    user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
    event_id INTEGER REFERENCES events(id) ON DELETE CASCADE,

    PRIMARY KEY (user_id, event_id)
);

我需要的是一个查询,它返回关于每个事件是否被用户收藏的所有事件和信息(最好是布尔值)(它的 ID 可用,你可以称之为 user_id)。

到目前为止,我已经尝试过:

Event.findAll({
    include: { 
        model: sequelize.models.favorites,
        required: false,
        where: {
            user_id: user_id
        }
    }
});

在事件模型中,我有关联

models.events.belongsToMany(models.users, { through: 'favorites'});

在用户模型中我有关联

models.users.belongsToMany(models.events, { through: 'favorites'});

标签: node.jspostgresqlsequelize.js

解决方案


设法想出了一个解决方案:

Event.findAll({
    include: { 
        model: sequelize.models.users,
        as: 'favorite',
        where: {
            id: user_id
        },
        required: false
    }
});

具有以下关联:

models.users.belongsToMany(models.events, { through: 'favorites', as: 'favorite'});

models.events.belongsToMany(models.users, { through: 'favorites', as: 'favorite'});

推荐阅读