#sql-server #sequelize.js
#sql-сервер #sequelize.js
Вопрос:
Как я могу запустить функцию rank для генерации атрибута в данной модели sequelize?
Например, учитывая модель:
Players.init(
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false
},
rating: type: DataTypes.FLOAT
},
{ sequelize }
)
Я хотел бы получать атрибут rank
при запуске Players.getAll({ rank: rating })
. Это сгенерировало бы SQL, подобный:
SELECT id, rating, RANK() OVER (ORDER BY rating DESC) as rank FROM players
Как бы я это сделал, используя sequelize?
Ответ №1:
Вы можете использовать функцию Sequelize Literal следующим образом —
attributes: [
'id', 'rating',
[Sequelize.literal('(RANK() OVER (ORDER BY rating DESC))'), 'rank']
]
для создания новых атрибутов.
Комментарии:
1. Спасибо! Это сработало, но у меня возникла другая проблема: этот
rank
атрибут доступен только в возвращаемом запросе, если яJSON.stringify()
его. Это проблема, потому что при построении возвращаемой модели пропускаются свойства с помощью геттеров, которые у меня также есть. Я нашел обходной путь, при котором я объединяю строковую модель с исходной моделью, но это кажется халтурным. Есть идеи, как получить доступ к этим атрибутам непосредственно в модели без упорядочивания?2. Я выяснил, что
Model.get()
это вернет атрибуты, добавленные таким образом, но это вернет виртуальные средства получения, только если они определены как атрибуты вModel.init()
, а не в определении класса модели.3. Это именно то, что я искал, 1 для вас .