オフィス狛 技術部 CTOの Taka-yamです。
Node.js のアプリケーションを開発していて、
SQLを構築するためにknexというライブラリを活用しています。
http://knexjs.org
素のSQLに近い形でfluentにSQLを構築できるので大変便利なのですが、
動的パラメータでlike検索を行うとした際に値の設定方法ではまったので共有します。
下記のようなユーザテーブルがあるとします。
User id: String name: String
textという変数に入力された値が格納されているとして
ユーザテーブルのnameカラムにあいまい検索を行うとします。
まず最初に思いついたのが、
knex(‘user’).whereRaw(“name like ‘%?%’”, text);
これはエラーとなります。
type \"like\" does not exist"
次に思いついたのが、
knex(‘user’).where('name', 'like', knex.raw('%?%', text));
これもエラーになります。
syntax error at or near \"%\""
次に思いついたのが、
knex(‘user’).whereRaw(‘name like %' + text + '%');
これもエラーになります。
syntax error at or near \"%\""
次に思いついたのが、
knex(‘user’).whereRaw("name like '%" + text + "%'");
これはうまくいきました。
ですが、このような文字列連結をすると弊社で使用している Lint に怒られてgit commitさえ出来ません。(lint-stagedでcommit制限掛けているので)
なので、最終的に、
knex(‘user’).where(‘name’, 'like', `%${text}%`);
となりました。
結論を見ればすごい単純なことなのですが、
結構はまったので、もし同じようなことで困っている人の助けになれば幸いです。
Node.js
0 件のコメント:
コメントを投稿