代码之家  ›  专栏  ›  技术社区  ›  gwalshington

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

  •  2
  • gwalshington  · 技术社区  · 6 年前

    有一个 user level ,和 levels_user 桌子。 用户 ,我想包括1 哪里 level_id 是最高的。

    我能给这个模型文件加个条件吗,比如:

    order_by: ['level_id', 'DESC']

    水平仪型号

      '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 每次?如果不是的话,有什么更好的方法来实现只返回最高的 levels_users 记录在哪里

    2 回复  |  直到 6 年前
        1
  •  0
  •   Tourki    6 年前

    当您希望在用户对象中包含所有级别时,hasMany属性更合适。在您的情况下,我建议只拉取不带级别的用户,然后通过直接查询LevelsUsers模型执行第二个请求以拉取链接到该用户的更高级别:

    models.LevelsUsers.findAll({
      where: {
        user_id: user.id,
      },
      order: ['level_id', 'DESC'],
      limit: 1,
    });
        2
  •  0
  •   front_end_dev    6 年前

    我在看 sequelize

    更新查询

    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