Node.js序列化模型-我可以定义模型上记录的顺序吗?

时间:2018-10-25 17:49:57

标签: node.js sequelize.js

我对node还是很陌生的,无法弄清楚如何仅基于属性返回hasMany关系的1条记录。

有一个userlevellevels_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是最高的记录?

2 个答案:

答案 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