首页 > 解决方案 > 用列名在引用表中使用现有关联 Id 急切地创建()

问题描述

有没有办法通过关联急切地按名称获取 id 而无需在关联中创建行?

假设我有关联

module.exports = (sequelize, DataTypes) => {
    const ApiKey = sequelize.define(
        "ApiKey",
        {
            id: {
                type: DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement: true,
                allowNull: false,
            },
            PermissionId: {
                type: DataTypes.INTEGER,
            },
        },
        {
            timestamps: true,
        }
    );

    ApiKey.associate = function (models) {
        ApiKey.belongsTo(models.Permission);
    };

    return ApiKey;
};

我希望能够在一个查询中得到这个:

models.ApiKey.create(
    {
        PermissionId: 'Automatically get ID by some select',
    },
    {
        include: [{ model: models.Permission }],
    }
);

我能够像这样得到它(我不想要):

models.ApiKey.create(
    {
        PermissionId: literal(
                        `(SELECT id FROM Permission WHERE name = 'guest')`
                    ),,
    },
);

标签: sequelize.js

解决方案


像这样的设置怎么样:

models.Permission.findOne({
    where: {
        name: 'guest'
    }
}).then(function (permission) {
    models.ApiKey.create(
        {
            PermissionId: permission.id
        },
    );
});

推荐阅读