2015-10-02 5 views
1

Я получаю странную ошибку:Knex.js SQL ошибка синтаксиса около «выберите»

{ __cid: '__cid9', 
    method: 'insert', 
    options: undefined, 
    bindings: 
    [ 500, 
    'Dinner', 
    '10/02/2015 7:57 PM', 
    '09/29/2015 8:00 PM', 
    'Grand Plaza', 
    1 ], 
    sql: 'insert into "expense" ("amount", "description", "due_date", "payment_date", "vendor_id") values ($1, $2, $3, $4, select "vendor_id" from "vendor" where "name" = $5 limit $6)', 
    returning: undefined } 
error: syntax error at or near "select" 
at [object Object].Connection.parseE (/.../node_modules/pg/lib/connection.js:534:11) 
    at [object Object].Connection.parseMessage (/.../node_modules/pg/lib/connection.js:361:17) 
    at Socket.<anonymous> (/.../node_modules/pg/lib/connection.js:105:22) 
    at Socket.emit (events.js:107:17) 
    at readableAddChunk (_stream_readable.js:163:16) 
    at Socket.Readable.push (_stream_readable.js:126:10) 
    at TCP.onread (net.js:538:20) 

Я запустил необработанный SQL с теми значениями вырезать и вставить, и она работает просто отлично.

Это код, то будет порождающие ошибки:

Promise.each subbudget.expenses, (expense) -> 
    vendor.get(expense.vendor).then (vendor_id) -> 
     knex('expense').insert(
      due_date: expense.dueDate 
      vendor_id: (knex.first("vendor_id").from("vendor").where({name: vendor_id})) 
      amount: expense.amount 
      description: expense.description 
      payment_date: expense.paidDate 
     ) 

Редактировать (частичное решение): вопрос, как представляется, круглые скобки отсутствуют вокруг ЗЕЬЕСТ. Knex предлагает .wrap(), который работает только с raw, и .as(), который работает только на вложенных операциях; по какой-то причине это не квалифицируется как вложенный оператор, поэтому я не могу получить круглые скобки вокруг него. Есть идеи?

ответ

0

knex.raw ("(" + knex.first ("VENDOR_ID") из ("поставщик"), где ({имя: VENDOR_ID}...) ToString() + ")")

Не самый чистый, но используйте .toString(), затем заверните его в .raw()

Смежные вопросы