Использование параметров динамического поиска с secuteelize.js

StackOverflow https://stackoverflow.com/questions/9321225

Вопрос

Я пытаюсь следовать Проседание учебника на их веб -сайте.

Я достиг следующей строки кода.

Project.findAll({where: ["id > ?", 25]}).success(function(projects) {
  // projects will be an array of Projects having a greater id than 25
})

Если я немного настраиваю его следующим образом

Project.findAll({where: ["title like '%awe%'"]}).success(function(projects) {
    for (var i=0; i<projects.length; i++) {
        console.log(projects[i].title + " " + projects[i].description);
    }
});

Все работает нормально. Однако, когда я пытаюсь сделать параметр поиска динамикой следующим образом

Project.findAll({where: ["title like '%?%'", 'awe']}).success(function(projects) {
    for (var i=0; i<projects.length; i++) {
        console.log(projects[i].title + " " + projects[i].description);
    }
});

Это больше не возвращает каких -либо результатов. Как я могу это исправить?

Это было полезно?

Решение

Я думаю, вы бы сделали это так:

where: ["title like ?", '%' + 'awe' + '%']

Так что, если бы вы делали это с фактической переменной, которую вы бы использовали:

Project.findAll({where: ["title like ?", '%' + x + '%']}).success(function(projects) {
    for (var i=0; i<projects.length; i++) {
        console.log(projects[i].title + " " + projects[i].description);
    }
});

Другие советы

Теперь в продолжении вы можете попробовать это

{ where: { columnName: { $like: '%awe%' } } }

Видеть http://docs.equelizejs.com/en/latest/docs/querying/#operators Для обновленного синтаксиса

Я бы сделал это таким образом:

Project.findAll({where: {title: {like: '%' + x + '%'}, id: {gt: 10}}).success(function(projects) {
  for (var i=0; i<projects.length; i++) {
    console.log(projects[i].title + " " + projects[i].description);
  }
});

Таким образом, вы можете получить больше, где клауузы

Пожалуйста, попробуйте этот код

const Sequelize = require('sequelize');
const Op = Sequelize.Op;
{ where: { columnName: { [Op.like]: '%awe%' } } }

Это может быть чище, чтобы использовать функцию scentize.utils.format

Принятый ответ ["columnName like ?", '%' + x + '%'] Для предложения о том, что приводит к этой ошибке в продолжении 4.41.1: «Поддержка буквальных замен в where Объект был удален ".

Предполагая: modelName.findAll({ where : { columnName : { searchCriteria } } });

С использованием [Op.like]: '%awe%' или же $like: '%awe%' } Поскольку SearchCriteria (где «трепет» - это значение, которое вы хотите найти в имени ColumnName) приводят к SQL с подобным пунктом LIKE '\"%awe%\"'. Анкет Обратите внимание на дополнительные кавычки. [Op. Like] и $, как, являются псевдонимом друг друга, и ни один из них не отвечает на вопрос OP, потому что они не допускают динамические параметры поиска.

С использованием [Op.like] : `%${parameter}%` Поскольку SearchCriteria (где «параметр» - это параметр, значение которого вы хотите найти в ColumnName) привело к SQL с таковым пунктом LIKE '\"%findMe\"' Когда параметр = 'findme'. Опять же, обратите внимание на дополнительные кавычки. Нет результатов.

Ответ в Еще один пост Stackoverflow предлагается использование [Op.like]: [`%${parameter}%`] Для SearchCriteria (где «параметр» - это параметр, значение которого вы хотите найти в ColumnName). Обратите внимание на квадратные скобки! Это привело к SQL с подобным пунктом LIKE '[\"%findMe%\"]' Когда параметр = 'findme'. Еще раз обратите внимание на дополнительные кавычки и квадратные кронштейны. Нет результатов.

Для меня решением было использовать необработанный запрос:Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top