Я получаю странную ошибку: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(), который работает только на вложенных операциях; по какой-то причине это не квалифицируется как вложенный оператор, поэтому я не могу получить круглые скобки вокруг него. Есть идеи?