如何在 Sequelize.js + Postgres.js 中给出主键和外键关系



我无法将关系放入两个表 用户和媒体用户具有应包含媒体 ID 的配置文件字段。

现在我已经编写了这些模型 用户和媒体 现在我想使用连接查询获取数据。

用户模型

const User = sequelize.sequelize.define('users', {
    id: {
        type: sequelize.Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    firstName: {
        type: sequelize.Sequelize.STRING
    },
    lastName: {
        type: sequelize.Sequelize.STRING
    },
    email: {
        type: sequelize.Sequelize.STRING
    },
    media_id: {
        type: sequelize.Sequelize.INTEGER,
        foreignKey: true
    }
});
Media.belongsTo(User, {
    as: 'media',
    foreignKey: {
        name: 'media_id',
        allowNull: false
    }
});
User.find({where: {}, include: [Media]})
User.sync();

媒体模型

const Media = sequelize.sequelize.define('media', {
    id: {
        type: sequelize.Sequelize.INTEGER,
        primaryKey: true
    },
    path: {
        type: sequelize.Sequelize.STRING
    },
    type: {
        type: sequelize.Sequelize.STRING
    }
});
Media.sync();

首先,Media.belongsTo(User...)将向Media模型添加一个字段media_id,这不是您想要的。请尝试:

User.belongsTo(Media, {
    as: 'media',
    foreignKey: {
        name: 'media_id',
        allowNull: false
    }
});

然后,您应该修改查询:

// Find all users with media where media.id === user.media_id
User.findAll({
    include: [{
        model: Media,
        where: { id: Sequelize.col('user.media_id') }
    }]
})

最新更新