typeormでの複数同名カラム条件の追加

typeormでの複数同名カラム条件の追加:

同名のカラムに対してパラメータ名が同じだと、パラメータが上書きされてしまいます。

パラメータには['hoge', 'fuga']を渡したいのに・・

NG

queryBuilder.andWhere( 
        new Brackets(subQb => { 
          for (const [key, value] of list.entries()) { 
            subQb.orWhere('name = :name', { name: value }); 
          } 
        }), 
      ); 
これで生成されるSQLが以下。

AND (name = @2 OR name = @3)  
 -- PARAMETERS: ["fuga","fuga"]   <== 困った 
なので、意図的にパラメータ名が一意になるようにします。

OK

queryBuilder.andWhere( 
        new Brackets(subQb => { 
          for (const [key, value] of list.entries()) { 
            subQb.orWhere(`name = :name_${key}`, { [`name_${key}`]: value }); 
          } 
        }), 
      ); 
配列のキーに変数が簡単に使えるようになったの最高ですね。

参考:ES2015以降のJavaScriptでObjectのkeyに変数を使う - Qiita

これで生成されるSQLが以下。

AND (name = @2 OR name = @3)  
 -- PARAMETERS: ["hoge","fuga"] 

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2024-02-12 22:08:06 RSSフィード2024-02-12 22:00分まとめ(7件)