En créant un objet comme celui-ci
var condition=
{
where:
{
LastName:"Doe",
FirstName:["John","Jane"],
Age:{
gt:18
}
}
}
et le transmettre
Student.findAll(condition)
.success(function(students){
})
Il pourrait magnifiquement générer du SQL comme celui-ci
"SELECT * FROM Student WHERE LastName='Doe' AND FirstName in ("John","Jane") AND Age>18"
Cependant, tout est "ET", comment pourrais-je générer une "OU" en créant un objet de condition?
Semble il y a un autre format maintenant
where: {
LastName: "Doe",
$or: [
{
FirstName:
{
$eq: "John"
}
},
{
FirstName:
{
$eq: "Jane"
}
},
{
Age:
{
$gt: 18
}
}
]
}
Va générer
WHERE LastName='Doe' AND (FirstName = 'John' OR FirstName = 'Jane' OR Age > 18)
Voir la doc: http://docs.sequelizejs.com/fr/latest/docs/querying/#where
Utilisation Sequelize.or
:
var condition = {
where: Sequelize.and(
{ name: 'a project' },
Sequelize.or(
{ id: [1,2,3] },
{ id: { lt: 10 } }
)
)
};
Référence (recherche de Sequelize.or
)
Edit: De plus, cela a été modifié et pour la dernière méthode, voir réponse de Morio ,
Les opérateurs basés sur des chaînes seront obsolètes à l'avenir (vous avez probablement déjà vu l'avertissement dans la console).
Faire en sorte que cela fonctionne avec des opérateurs symboliques était assez déroutant pour moi, et j'ai mis à jour le docs avec deux exemples.
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;
Pour Sequelize 4
Question
SELECT * FROM Student WHERE LastName='Doe'
AND (FirstName = "John" or FirstName = "Jane") AND Age BETWEEN 18 AND 24
Syntaxe avec opérateurs
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]
}
}
}
));
Remarques
$
(par exemple $and
, $or
...){freezeTableName: true}
défini dans le modèle de table, alors Sequelize interrogera la forme plurielle de son nom (Student -> Students )Dans Sequelize version 5, vous pouvez également utiliser cette méthode (utiliser pleinement Operator Sequelize):
var condition =
{
[Op.or]: [
{
LastName: {
[Op.eq]: "Doe"
},
},
{
FirstName: {
[Op.or]: ["John", "Jane"]
}
},
{
Age:{
[Op.gt]: 18
}
}
]
}
Et puis, vous devez inclure ceci:
const Op = require('Sequelize').Op
et le transmettre:
Student.findAll(condition)
.success(function(students){
//
})
Il pourrait magnifiquement générer SQL comme ceci:
"SELECT * FROM Student WHERE LastName='Doe' OR FirstName in ("John","Jane") OR Age>18"