2017-10-30 4 views
1
const userPhoneNumber = await transaction.one(pgp.as.format(`${pgp.helpers.update({ 
     modifiedById: login.objectId, 
     modifiedTimestamp: now, 
     phoneNumber 
    }, columnSets.userPhoneNumbers.forUpdateById)} WHERE object_id = $/objectId/ AND removed = $/removed/ AND userId = $/userId/ RETURNING *`, { objectId, removed: false, userId })); 

今私は自分のコードでこれをやっています。私は列を活用カラムセットを使用してPgPromiseインラインクエリの書式設定に未加工SQLを使用しないでください

  1. にできるようにしたいしかし、私はここにもクエリファイルを利用する方法がわからないSQL

を生成するように設定欄と一緒に

  • 使用pgp.update方法を設定します。私はどのように私のJavaScriptコードでRAW SQL文字列を使用して避けることができるクエリファイルを使用することができますか?

    今私はそう

    {statement:raw} WHERE object_id = $/objectId/ AND removed = $/removed/ AND userId = $/userId/ RETURNING *

    のようなクエリファイルを実行すると考えることができます。しかし、これは部分生声明を注入するABITハック感じています。

  • 答えて

    1

    最初に、使用する列とテーブルに従って、ColumnSetオブジェクトを静的に宣言します。例えば:それは、クエリを実行するための時間になると、あなたはこのようなあなたのWHERE条件を準備

    const cs = new pgp.helpers.ColumnSet(['col1, col2', 'col3'], {table: 'my-table'}); 
    

    const updateSql = pgp.helpers.update(data, cs) + where; 
    

    const where = pgp.as.format(' WHERE object_id = ${objectId} AND removed = ${removed} AND 
        userId = ${userId} RETURNING *', {objectId, removed, userId}); 
    

    次に、あなたがこのような完全なUPDATE SQLを生成することができます

    これで、そのsqlを実行できます。

    私はあなたがすることができますが、あなたがしたい場合は、さらに説明するように、外部クエリファイルを使用して多くのポイントは、、、ありません、あなたの例では、ここで

    クエリファイルを利用する方法がわからないです。

    あなたは、次のファイルを作成することができます。そして、あなたはあなたのような他のQueryFileそれを考えロード

    ${update:raw} WHERE object_id = ${objectId} AND removed = ${removed} AND 
    userId = ${userId} RETURNING * 
    

    を:

    const qf = new pgp.QueryFile(path, options); 
    

    そしてあなたは、このような完全なSQLクエリを生成することができます

    const updateSql = pgp.as.format(qf, { 
        update: pgp.helpers.update(data, cs), 
        objectId, 
        removed, 
        userId 
    }); 
    
    +0

    私は重複してqueryfilrを使用するか、生のSQL文字列をcod e。 Idkなぜ素敵な解決策ではないとして生のSQLを構築する感じhaha – Zanko

    +0

    @Zankoライブラリ 'pg-promise'は生のSQLを実行するためのものです。だから生のSQLを準備することであなたの問題は何ですか? SQLを書くのが好きではない、あるいはそれをよく理解していない人は、通常、ORMのために行くのです。ライブラリ 'pg-promise'は最高のパフォーマンス+究極の柔軟性に関するものです。 –

    +0

    @ Zanko私の答えがあなたの質問を満たしていれば、それを受け入れてください。 b.t.w.私は 'pg-promise'の著者ですので、あなたはもっと良い答えを見つけられません:) –

    関連する問題