node.js - framework - middlewares nodejs
Secuela el objeto de condición OR (5)
Creando un objeto como este
var condition=
{
where:
{
LastName:"Doe",
FirstName:["John","Jane"],
Age:{
gt:18
}
}
}
y pasarlo en
Student.findAll(condition)
.success(function(students){
})
Podría muy bien generar SQL como este
"SELECT * FROM Student WHERE LastName=''Doe'' AND FirstName in ("John","Jane") AND Age>18"
Sin embargo, es todo condición "AND", ¿cómo podría generar la condición ''O'' creando un objeto de condición?
Los operadores basados en cadenas estarán en desuso en el futuro (probablemente haya visto la advertencia en la consola).
Conseguir que esto funcione con operadores simbólicos fue bastante confuso para mí, y he actualizado los docs con dos ejemplos.
Post.findAll({
where: {
[Op.or]: [{authorId: 12}, {authorId: 13}]
}
});
// SELECT * FROM post WHERE authorId = 12 OR authorId = 13;
Post.findAll({
where: {
authorId: {
[Op.or]: [12, 13]
}
}
});
// SELECT * FROM post WHERE authorId = 12 OR authorId = 13;
Para Sequelize 4
Consulta
SELECT * FROM Student WHERE LastName=''Doe''
AND (FirstName = "John" or FirstName = "Jane") AND Age BETWEEN 18 AND 24
Sintaxis con Operators
const Op = require(''Sequelize'').Op;
var r = await to (Student.findAll(
{
where: {
LastName: "Doe",
FirstName: {
[Op.or]: ["John", "Jane"]
},
Age: {
// [Op.gt]: 18
[Op.between]: [18, 24]
}
}
}
));
Notas
- Para una mejor seguridad, Sequelize recomienda descartar operadores de alias
$
(por ejemplo,$and
,$or
...) - A menos que tenga
{freezeTableName: true}
establecido en el modelo de tabla, Sequelize consultará contra la forma plural de su nombre (Estudiante -> Estudiantes )
Parece que hay otro formato ahora
where: {
LastName: "Doe",
$or: [
{
FirstName:
{
$eq: "John"
}
},
{
FirstName:
{
$eq: "Jane"
}
},
{
Age:
{
$gt: 18
}
}
]
}
Generará
WHERE LastName=''Doe'' AND (FirstName = ''John'' OR FirstName = ''Jane'' OR Age > 18)
Ver el documento: http://docs.sequelizejs.com/en/latest/docs/querying/#where
Use Sequelize.or
:
var condition = {
where: Sequelize.and(
{ name: ''a project'' },
Sequelize.or(
{ id: [1,2,3] },
{ id: { lt: 10 } }
)
)
};
Reference (busque Sequelize.or
)
Editar: Además, esto ha sido modificado y para el último método ver la respuesta de Morio ,