このようなオブジェクトを作成することにより
var condition=
{
where:
{
LastName:"Doe",
FirstName:["John","Jane"],
Age:{
gt:18
}
}
}
そしてそれを渡す
Student.findAll(condition)
.success(function(students){
})
このようにSQLを美しく生成できます
"SELECT * FROM Student WHERE LastName='Doe' AND FirstName in ("John","Jane") AND Age>18"
しかし、それはすべて「AND」条件ですが、条件オブジェクトを作成して「OR」条件を生成するにはどうすればよいですか?
現在、別の形式があるようです
where: {
LastName: "Doe",
$or: [
{
FirstName:
{
$eq: "John"
}
},
{
FirstName:
{
$eq: "Jane"
}
},
{
Age:
{
$gt: 18
}
}
]
}
生成します
WHERE LastName='Doe' AND (FirstName = 'John' OR FirstName = 'Jane' OR Age > 18)
ドキュメントを参照してください: http://docs.sequelizejs.com/en/latest/docs/querying/#where
つかいます Sequelize.or
:
var condition = {
where: Sequelize.and(
{ name: 'a project' },
Sequelize.or(
{ id: [1,2,3] },
{ id: { lt: 10 } }
)
)
};
参照 (Sequelize.or
)
編集:また、これは修正されました。最新の方法については、 Morio's answer 、
文字列ベースの演算子は将来廃止される予定です(おそらくコンソールで警告を見たことがあるでしょう)。
これをシンボリック演算子で動作させるのは非常に混乱し、2つの例で docs を更新しました。
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;
Sequelize 4の場合
問い合わせ
SELECT * FROM Student WHERE LastName='Doe'
AND (FirstName = "John" or FirstName = "Jane") AND Age BETWEEN 18 AND 24
演算子 を使用した構文
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]
}
}
}
));
ノート
$
(例:$and
、$or
...){freezeTableName: true}
テーブルモデルに設定すると、Sequelizeはその名前の複数形に対してクエリを実行します(Student->Students)Sequelizeバージョン5では、この方法を使用することもできます(Operator Sequelizeを完全に使用):
var condition =
{
[Op.or]: [
{
LastName: {
[Op.eq]: "Doe"
},
},
{
FirstName: {
[Op.or]: ["John", "Jane"]
}
},
{
Age:{
[Op.gt]: 18
}
}
]
}
そして、これを含める必要があります:
const Op = require('Sequelize').Op
そしてそれを渡します:
Student.findAll(condition)
.success(function(students){
//
})
次のようなSQLを美しく生成できます。
"SELECT * FROM Student WHERE LastName='Doe' OR FirstName in ("John","Jane") OR Age>18"