Monday, 29 October 2018

Node.js sequelize model - can I define order of records on the model?

I am newish to node, and can't figure out how to only return 1 record of a hasMany relationship, based on an attribute.

There's a user, level, and levels_user table. On user, I want to include 1 levels_user where level_id is highest.

Can I put a condition on this model file, something like:

order_by: ['level_id', 'DESC']

LevelsUsers Model

  '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 model association:

    Users.hasMany(models.LevelsUsers, {
        as: 'levels_users',
        targetKey: 'id',
        foreignKey: 'user_id',
    });

This is my call:

users.getProfileByUserId = (req, res) => {
    models.Users.findOne({
      where: {id: req.params.userid},
      include: [
        {
          model: models.LevelsUsers,
          as: 'levels_users',
          limit: 1,
        }
      ]
      order: []
   }).then(user ....

I tried adding:

     `order: [
        [ models.LevelsUsers , 'level_id', 'DESC']
      ]`

Did not work and I think it's evaluated after limit: 1 anyways.

Can I put order_by on the model, to return highest to lowest by level_id each time? If not, what's a better way to accomplish returning only the highest levels_users record where level_id is highest?



from Node.js sequelize model - can I define order of records on the model?

No comments:

Post a Comment