我需要这个 SQL (在mysql控制台中工作得很好):
SQL
SELECT LEFT(authors.last_name,1) AS first_char
在 "bookshelf.js" .
"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 还在那里。
authors.last_name
.select() 防止SQL注入,因此您不能将随机SQL传递给它并期望它正常工作。您需要使用原始表达式:
.select()
qb.column('last_name').select(qb.raw('LEFT(authors.last_name,1)')).from('authors').as('first_char');
从技术上讲,这不是一个书架问题,因为查询生成器只是knex。