我对node还是很陌生的,无法弄清楚如何仅基于属性返回hasMany关系的1条记录。
有一个user
,level
和levels_user
表。
在user
上,我想包括1个levels_user
,其中level_id
最高。
我可以对此模型文件施加条件吗?
order_by: ['level_id', 'DESC']
LevelsUsers模型
'use strict';
module.exports = (sequelize, DataTypes) => {
let LevelsUsers = sequelize.define('LevelsUsers', {
user_id: DataTypes.INTEGER,
level_id: DataTypes.INTEGER,
created_at: DataTypes.DATE,
updated_at: DataTypes.DATE,
},{
timestamps: false,
freezeTableName: true,
schema: "public",
tableName: "levels_users"
});
return LevelsUsers;
};
用户模型关联:
Users.hasMany(models.LevelsUsers, {
as: 'levels_users',
targetKey: 'id',
foreignKey: 'user_id',
});
这是我的电话:
users.getProfileByUserId = (req, res) => {
models.Users.findOne({
where: {id: req.params.userid},
include: [
{
model: models.LevelsUsers,
as: 'levels_users',
limit: 1,
}
]
order: []
}).then(user ....
我尝试添加:
`order: [
[ models.LevelsUsers , 'level_id', 'DESC']
]`
没用,我认为它是在limit: 1
之后进行评估的。
我可以将order_by
放在模型上,以每次level_id
的最高值返回最低值吗?如果没有,有什么更好的方法来完成,只返回最高的levels_users
记录,其中level_id
是最高的记录?
答案 0 :(得分:0)
当您想在用户对象中包含所有级别时,hasMany属性更合适。在您的情况下,我建议您仅在没有用户级别的情况下拉用户,然后再次请求直接查询LevelsUsers模型以拉出链接到该用户的更高级别的请求:
models.LevelsUsers.findAll({
where: {
user_id: user.id,
},
order: ['level_id', 'DESC'],
limit: 1,
});
答案 1 :(得分:0)
我会仔细阅读sequelize
的文档,以了解include标记内的排序和限制。
更新查询
users.getProfileByUserId = (req, res) => {
models.Users.findOne({
where: {id: req.params.userid},
include: [
{
model: models.LevelsUsers,
as: 'levels_users',
order: [
[ { model: models.LevelsUsers }, 'level_id', 'DESC']
],
limit: 1,
}
]
}).then(user ....
有关参考,请通过以下链接-https://github.com/sequelize/sequelize/issues/4553#issuecomment-341261957