如何将带有别名的SQL LEFT放入书架中?

时间:2018-07-29 17:53:58

标签: knex.js bookshelf.js

我需要这个SQL(在mysql控制台中完美运行):

SELECT LEFT(authors.last_name,1) AS first_char

"bookshelf.js"中。

虽然我走了这么远:

let result = await qb.column('last_name').select().from('authors').as('first_char');

我无法获得

let result = await qb.column('last_name').select('LEFT(authors.last_name,1)').from('authors').as('first_char');

这一切。

它导致以下错误:

Error: ER_BAD_FIELD_ERROR: Unknown column 'LEFT(authors.last_name,1)' in 'field list'

这对我来说没有意义,因为列authors.last_name仍然存在。

1 个答案:

答案 0 :(得分:0)

.select()可以防止SQL注入,因此您不能只是将随机SQL传递给SQL并期望它能工作。您需要为此使用原始表达式:

qb.column('last_name').select(qb.raw('LEFT(authors.last_name,1)')).from('authors').as('first_char');

在这一点上,从技术上讲,这不是书架上的问题,因为查询生成器只是个纽结。