Pregunta

Estoy tratando de seguir el Secuestrar tutorial en su sitio web.

He llegado a la siguiente línea de código.

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

Si lo ajusto un poco como sigue

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);
    }
});

Todo funciona bien. Sin embargo, cuando intento hacer la dinámica del parámetro de búsqueda de la siguiente manera

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);
    }
});

Ya no devuelve ningún resultado. ¿Cómo puedo arreglar esto?

¿Fue útil?

Solución

Creo que harías eso así:

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

Entonces, si estuviera haciendo esto con una variable real, usaría:

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);
    }
});

Otros consejos

Ahora en SECLEZIZE PUEDES PROBAR ESTO

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

Ver http://docs.sequelizejs.com/en/latest/docs/querying/#operators Para sintaxis actualizada

Lo haría de esta manera:

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);
  }
});

De esta manera puedes tener muy bien donde Clausas

Prueba este código

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

Puede ser más limpio aprovechar la función de secuelas.utilss.format

La respuesta aceptada de ["columnName like ?", '%' + x + '%'] Para la cláusula WHERE da como resultado este error en SECLELIZE 4.41.1: "Soporte para reemplazos literales en el where El objeto ha sido eliminado ".

Asumiendo: modelName.findAll({ where : { columnName : { searchCriteria } } });

Usando [Op.like]: '%awe%' o $like: '%awe%' } Como el SearchCriteria (donde 'Awe' es el valor que desea encontrar en ColumnName), ambos dan como resultado SQL con una cláusula similar de LIKE '\"%awe%\"'. Observe las comillas adicionales. [OP. Like] y $ Like son alias el uno del otro y ninguno de los dos responde a la pregunta del OP porque no permiten parámetros de búsqueda dinámicos.

Usando [Op.like] : `%${parameter}%` Como el SearchCriteria (donde 'Parámetro' es el parámetro cuyo valor desea encontrar en ColumnName) dio como resultado SQL con una cláusula similar de LIKE '\"%findMe\"' Cuando parámetro = 'findme'. Nuevamente, observe las comillas adicionales. No hay resultados.

Una respuesta en Otra publicación de Stackoverflow sugerido usando [Op.like]: [`%${parameter}%`] Para el SearchCriteria (donde 'Parámetro' es el parámetro cuyo valor desea encontrar en ColumnName). ¡Observe los soportes cuadrados! Esto resultó en SQL con una cláusula similar de LIKE '[\"%findMe%\"]' Cuando parámetro = 'findme'. Nuevamente observe las comillas adicionales y los soportes cuadrados. No hay resultados.

Para mí, la solución era usar una consulta sin procesar:Sequelize.query('SELECT * FROM tableName WHERE columnName LIKE "%searchCriteria%"');

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top