Несогласованная конструкция запроса Sequelize для пользовательского запроса

#node.js #sequelize.js

#node.js #sequelize.js

Вопрос:

В настоящее время я пытаюсь создать запрос Sequelize в моем узловом приложении, как показано ниже;

 import sequelize from 'sequelize';

function getReadMsg(){
  const where = [sequelize.where(
    sequelize.literal('"Message"."status" = 'read'') 
  )];

  const attributes = { exclude: ['updated_at'] };

  const order = [['created_at', 'ASC']];

  return model.findAll({ where, attributes, order }); // model is a sequelize model object
}
  

Однако созданный сырой запрос Sequelize сравнивает блок
where
с null, что противоречит цели запроса.

Ниже приведен необработанный запрос Sequelize;

 SELECT "id", "title", "body", "to", "from", "status", "created_at" FROM "Messages" AS "Message" WHERE ("Message"."status" = 'read' IS NULL) ORDER BY "Message"."created_at" ASC;
  

Вместо;

 SELECT "id", "title", "body", "to", "from", "status", "created_at" FROM "Messages" AS "Message" WHERE ("Message"."status" = 'read') ORDER BY "Message"."created_at" ASC;
  

версия squelize: 5.21.4.

squelize-версия cli: 5.5.1.

версия узла: 12.16.1

Комментарии:

1. Пожалуйста, используйте что-то вроде sqlformat.org для форматирования ваших SQL-запросов.

2. @Anatoly, я бы посмотрел на это, спасибо

Ответ №1:

sequelize.where использует 3 параметра, и если вы опустите 2 последних, они будут ‘=’ и ‘null’ соответственно. Вы должны сделать что-то вроде этого:

 sequelize.where(sequelize.literal('"Message"."status"'), '=', 'read')