作業中のnode.jsプロジェクトに続編ORMを使用しています。私が持っている1つのクエリは、複数の列の連結結果に対して同様の操作を実行する必要があります。
たとえば、次のようなものです。
SELECT * FROM People WHERE(CONCAT(firstname、 ''、lastname))LIKE '%John Do%'。
私は次の構文を使用していますが、RAWクエリを使用せずにこれが可能かどうかを知りたいです(これは私のソリューションの他のどこにもありません)。
var criteria = {
include: [
occupation
],
where: {
is_active: 1
},
nest: false
};
db.people.findAll(criteria, {}).then(function(people) {
success(people);
}).catch(function(err) {
error(err);
});
何か案は?
このようなものが必要になります
var criteria = {
where: Sequelize.where(Sequelize.fn("concat", Sequelize.col("firstname"), Sequelize.col("lastname")), {
like: '%John Do%'
})
}
注:未テスト
@ code-jaffに触発されていますが、これを正しく機能させるには、姓と名の間にスペース文字列を連結する必要があります。それ以外の場合は、「JohnDoe」に対してのみ返され、「JohnDoe」に対しては返されません。これがコードです。
Sequelize.where(Sequelize.fn('concat', Sequelize.col('firstName'), ' ', Sequelize.col('lastName')), {
like: '% John Doe %'
})
これがクエリのどこに当てはまるかわからない人にコンテキストを提供するために、これはwhereまたはステートメントの上記のコードの例です。 req.body.queryは、POSTする変数検索用語です。
Users.findAll({
where: {
$or: [
Sequelize.where(Sequelize.fn('concat', Sequelize.col('firstName'), ' ', Sequelize.col('lastName')), {
like: '%' + req.body.query + '%'
}),
{ email: { $like: '%' + req.body.query + '%' } },
{ companyName: { $like: '%' + req.body.query + '%' } }
]
}
})
Sequelize 4.0のアップデート
文字列ベースの演算子(上記の例では$like
および$or
)は非推奨になり、シンボルベースの演算子が採用されました。それはセキュリティにとって良いことです
参照: http://docs.sequelizejs.com/manual/tutorial/querying.html#operators
これらの演算子は、[Sequelize.Op.like]
および[Sequelize.Op.or]
に置き換えられます。ドキュメントで強調表示されている続編オプションで構成する他の方法もあります