首页 > 解决方案 > Sequelize 在虚拟列中查询,如 Laravel 获取模型内的属性函数?

问题描述

我想从用户模型计算排名,其中排名只是数字。示例排名:

当用户等级为 150 点时,它应该是白银等级。我可以从虚拟列计算排名以通过查询排名表来获取排名名称吗?

"use strict";
module.exports = (sequelize, DataTypes) => {
const Rank = sequelize.define("Rank", {
   name: DataTypes.STRING,
   tier_total: DataTypes.INTEGER
});
const UserGameID = sequelize.define(
"UserGameID",
{
  user_id: DataTypes.INTEGER,
  total_win: {
    type: DataTypes.INTEGER,
    defaultValue: 0
  },
  total_lose: {
    type: DataTypes.INTEGER,
    defaultValue: 0
  },
  total_match: {
    type: DataTypes.INTEGER,
    defaultValue: 0
  },
  total_point: {
    type: DataTypes.INTEGER,
    defaultValue: 0
  },
  rank: {
    type: DataTypes.VIRTUAL,
    get: async function() {
      var rank = await Rank.findOne({
        where: {
          tier_total: { $lte: this.total_point }
        },
        order: [["tier_total", "desc"]]
      });
      return rank;
    }
  },
  status: DataTypes.BOOLEAN //false: unapproved, true: approved
}, { }
);

预期结果:

user_id: 1
total_win: 2
total_lose: 1
total_match: 3
total_point: 150
rank: silver

但排名总是返回 {}

标签: node.jssequelize.js

解决方案


推荐阅读