Использование WHERE с функцией в запросе Sequelize - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь использовать функцию JSON_ARRAY_LENGTH() в своем запросе Sequelize:

MyModel.query({
  where: sequelize.where(
    sequelize.fn('JSON_ARRAY_LENGTH', sequelize.col('cues')),
    0
  )
});

Это не похоже на работу. Генерирует неверный запрос:

SELECT id, title, /* etc. etc. */
FROM MyModel
WHERE
  `MyModel`.`attribute` = JSON_ARRAY_LENGTH(`cues)` AND
  `MyModel`.`comparator` = '=' AND
  `MyModel`.`logic` = 0;

Что это за вещи attribute, comparator и logic, и как мне их отключить?

Документация , кажется, поддерживает то, что я делаю. Его пример:

Post.findAll({
  where: sequelize.where(sequelize.fn('char_length', sequelize.col('status')), 6)
});
// SELECT * FROM post WHERE char_length(status) = 6;

Любые идеи будут наиболее цениться. Спасибо!

1 Ответ

0 голосов
/ 14 мая 2019

Кажется, я наткнулся на ошибку:

https://github.com/sequelize/sequelize/issues/6440

Это было исправлено в последних сборках:

https://github.com/sequelize/sequelize/pull/9730/commits/3b2972db2c494c8a4118a7e6c16aad0fc2e0eebe

Обходной путь сейчас заключался в том, чтобы обернуть мой запрос с помощью AND:

MyModel.query({
  where: {
    [sequelize.Op.and]: sequelize.where(
      sequelize.fn('JSON_ARRAY_LENGTH', sequelize.col('cues')),
      0
    )
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...