データ処理に喫水線ORMを使用して、SailsJS(ベータ)で簡単な検索関数を作成しようとしています。コントローラの関数は、ウォーターラインの事前定義されたfind()メソッドを使用して検索を実行します。
SQL-regexpパターンをwaterlinefind()-functionに送信して、一致するREGEXPを持つすべてのユーザーをフェッチすることは可能ですか?
私のコントローラーのfind-methodには、これが含まれています(私が求めている正規表現機能を除く):
// Replace any spaces with SQL regex wildcards
var regexp = req.body.search.replace(' ', '*');
// Show found users
User.find()
.where({
or: [
{username: { contains: req.body.search }},
{email: { contains: req.body.search }},
{fullName: { regexp: regexp }}
]
}).exec(function(err, users){
if (err){
return res.send(403, 'Failed to find users' + JSON.stringify(err));
}
res.view('userlist', {
users: users
});
});
fullName
属性は、属性内のインスタンスメソッドとして定義され、おそらく、検索ではありません。しかし、名前を適切に検索する方法はありますか?
これは私のユーザーモデルからの抜粋です:
module.exports = {
attributes: {
firstName: {
type: 'string'
},
lastName: {
type: 'string'
},
fullName: function(){
return this.firstName + ' ' + this.lastName;
},
(...some more attributes, as well as email and username...)
}
}
find()
-methodをSQL正規表現で機能させるにはどうすればよいですか?私の目標は、結果セットで「HansEikerol」を検索して「HansMartinEikerol」を表示することです。
Waterlineは、接続しているデータベースの.find()
基礎となるfind
構文にマップされます。正規表現はすべてのデータベースアダプタでサポートされているわけではないため、正規表現はサポートされていません。最近のほとんどの主流データベースには正規表現検索が標準で付属しているため、この機能はWaterlineにあるかもしれませんが、それ.query
までの間、ネイティブSQLクエリを実行するために使用できます。次に、結果を強制的にウォーターラインモデルに戻します。たとえば、sails-mysql
:
User.query("[some sql query using RLIKE]", function(err, rows) {
if (err){
return res.send(403, 'Failed to find users' + JSON.stringify(err));
}
res.view('userlist', {
// Map the rows returned by the query to Waterline instances
users: rows.map(function(row){return new User._model(row);});
});
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加