gpt4 book ai didi

node.js - Sequelize : can attribute have value from relation attribute data?

转载 作者:行者123 更新时间:2023-12-03 22:28:40 25 4
gpt4 key购买 nike

我不知道这是否可能,有 2 个模型通过关系关联,并且模型是这样定义的:

sequelize.define('account_has_plan', {
account_id: {
type: DataTypes.INTEGER(10),
allowNull: false,
primaryKey: true,
references: {
model: 'account',
key: 'id'
}
},
plan_id: {
type: DataTypes.INTEGER(10),
allowNull: false,
primaryKey: true,
references: {
model: 'plan',
key: 'id'
}
},
type_id: {
type: DataTypes.INTEGER(10),
allowNull: false,
primaryKey: true,
references: {
model: 'type',
key: 'id'
}
},
create_at: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: 'CURRENT_TIMESTAMP'
},
update_at: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: 'CURRENT_TIMESTAMP'
}
}, {
tableName: 'account_has_plan',
underscored: true,
freezeTableName: true,
timestamps: false
});

sequelize.define('type', {
id: {
type: DataTypes.INTEGER(10),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
allowNull: false
},
element: {
type: DataTypes.ENUM('Meal','Workout','Status'),
allowNull: false
}
}, {
tableName: 'type',
freezeTableName: true,
timestamps: false
});

调用模型并对数据库执行查询的代码是这样的:
var model = $.loadModel("account_has_plan");
var type = $.loadModel("type");


model.belongsTo(type);

var query = {
where: {
account_id: $.params.accountId
},
limit: $.query.limit || 12,
offset: $.query.offset || 0,
attributes:["account_id"],
include: [{
model: type
}]
};

model.findAll(query)
.then(function(data){
$.data = data;
$.json();
})
.catch(function(err){
console.log(err);
errorHandler.throwStatus(500, $);
});

这样来自服务器的数据响应如下:
{
"account_id": 1,
"type": {
"id": 2,
"name": "Arms",
"element": "Workout"
}
}

这些数据实际上没有问题,但我被迫遵循我提供的文档中的模式,不同之处在于 type实际上是一个字符串值而不是示例中显示的对象值,所以最后我尝试获取的数据结构必须是这样的:
{
"account_id": 1,
"type": "Arms"
}

我实际上知道如何实现这一点,我知道我对 sequelize 的实践很少,也许这必须通过模型方法或使用 through 来定义在引用中(我尝试过但返回错误)
但关键是..在我必须报告 REST 文档的重大更改之前,我需要知道是否有可能

最佳答案

首先,由于您将通过 sequelize 查询获得的是实例,因此您需要将其转换为“普通”对象。你可以通过使用一个名为 sequelize-values 的模块来做到这一点。 .

然后您应该能够手动将该值映射到您要查找的值。

model.findAll(query)
.then(function(data){
return data.map(function(d){
var rawValue = d.getValues();
rawValue.type = rawValue.type.name;
return rawValue;
});
})
.then(function(data){
$.data = data;
$.json();
})
.catch(function(err){
console.log(err);
errorHandler.throwStatus(500, $);
});

关于node.js - Sequelize : can attribute have value from relation attribute data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com