2016-06-24 7 views
1

我々はknexの列名の配列を使用している:KnexJS: "未処理の拒否エラー:ER_BAD_FIELD_ERROR:不明コラム"

knex 
     .select(["rowid", "accountid", "accountname"]) 
     .from("account") 
     .then(function (e, rows) { 
      callback(e, rows) 
    }) 

と、次のエラー取得:

select `rowid,accountid,accountname` from `account` 

Unhandled rejection Error: ER_BAD_FIELD_ERROR: Unknown column 'rowid,accountid,accountname' in 'field list' 

明らかに、列名の配列は、エラーの原因となっているフィールドの文字列に変換されています。個々のフィールドを正しく使用してください:

knex 
     .select("rowid", "accountid", "accountname") 
     .from('account') 
     .then(function (e, rows) { 
      callback(e, rows) 
    }) 

これは既知の問題ですか? 'select'関数で配列を使用するための回避策がありますか?私はknex 0.9.0を使用してテストを行なったし、それは文句なしselectのための配列引数を受け入れ

+0

なぜ配列でクエリする必要があるのか​​分かりますか?他の機能から継承されていますか? –

+0

フィールドはデータ辞書に保持されます。 "select.select([* columns]) クエリの列のオプションの配列を取ってselectクエリを作成します。クエリが作成されたときに何も指定されていない場合は、デフォルトで*になります選択呼び出しの応答は、データベースから選択されたオブジェクトの配列で解決されます。 – ASA2

+0

それは固まってしまったようです!フィールドの文字列が機能せず、配列が機能しません。何か案は? – ASA2

答えて

1

knex. 
    select(['c1','t1','c2']). 
    from('sample'). 
    then(function(rows) { 
    console.dir(rows); 
    }); 
// console.dir output: 
// [ { c1: 22, t1: 'xx', c2: 33 }, 
// { c1: 422, t1: 'xxxx', c2: 77 } ] 

あなたはあなたの例に気づいたかもしれませんが、とにかく問題を抱えている、then()は、一般的なコールバックエラーに従っていません最初のスタイル(callback(error, result))が反対の場合:then(success_callback, failure_callback)、ブルーバードは便利なメソッドcatch()を提供して、失敗呼び出しを回避します。

:あなたはまだ、列名の配列は、あなたのような、 .apply()呼び出しによって直接呼び出しを置き換えることはできませんknexのバージョンを使用することが起こる場合

knex 
    .select(["rowid", "accountid", "accountname"]) 
    .from('account') 
    .then(function (rows) { 
    callback(null, rows) 
    }) 
    .catch(function (e) { 
    callback(e, null); 
    }); 

:だからにコードを変更することができ

knex 
    .select.apply(knex, ["rowid", "accountid", "accountname"]) 
    .from('account') 
    .then(function (rows) { 
    callback(null, rows) 
    }) 
    .catch(function (e) { 
    callback(e, null); 
    }); 
+1

これは解決されました。パイロットエラー! :) – ASA2

関連する問題