使用 knex with raw 插入超过 1 个值
insert more than 1 value using knex with raw
我浏览了 knex 文档,并尝试了我能找到的所有可能的组合,但都没有成功。但是,使用 SQLiteStudio 我能够 成功 使用多个 ?
...
的常规查询
select * from 'articles' where LOWER("cover_page") = ? AND "cover_page" != "" AND "user_id" = ?
select * from 'articles' where LOWER("title") = ? AND "title" != "" AND "user_id" = ?
select * from 'articles' where LOWER("link") = ? AND "link" != "" AND "user_id" = ?
...在knex中,如果我一次只使用1 ?
,我可以获得以下成功:
const doesExist = await db('articles')
.where(db.raw('LOWER("cover_page") = ?', article.cover_page.toLowerCase()))
.orWhere(db.raw('LOWER("title") = ?', article.title.toLowerCase()))
.orWhere(db.raw('LOWER("link") = ?', article.link.toLowerCase()))
.first();
有谁知道如何输入第二个值 AND "user_id" = ?
??
目标是输出到 return nothing...
是的,你可以。另见 documentation link。
您缺少的关键是正确传递参数。查看用于传递变量的位置数组:.whereRaw('LOWER(cover_page) = ? AND LOWER(title) = ?', ['somepage', 'sometitle'])
(我还怀疑你不应该在这种情况下引用你的数据库字段。)
我还没有执行,但这应该很接近:
const doesExist = await db('articles')
.whereRaw('LOWER(cover_page) = ? OR LOWER(title) = ? OR LOWER(link) = ?',
[article.cover_page.toLowerCase(),
article.title.toLowerCase(),
article.link.toLowerCase()] )
.first();
PS:您也可以使用位置数组将参数传递给 raw()
,就像我在 whereRaw()
.
中使用的一样
我浏览了 knex 文档,并尝试了我能找到的所有可能的组合,但都没有成功。但是,使用 SQLiteStudio 我能够 成功 使用多个 ?
...
select * from 'articles' where LOWER("cover_page") = ? AND "cover_page" != "" AND "user_id" = ?
select * from 'articles' where LOWER("title") = ? AND "title" != "" AND "user_id" = ?
select * from 'articles' where LOWER("link") = ? AND "link" != "" AND "user_id" = ?
...在knex中,如果我一次只使用1 ?
,我可以获得以下成功:
const doesExist = await db('articles')
.where(db.raw('LOWER("cover_page") = ?', article.cover_page.toLowerCase()))
.orWhere(db.raw('LOWER("title") = ?', article.title.toLowerCase()))
.orWhere(db.raw('LOWER("link") = ?', article.link.toLowerCase()))
.first();
有谁知道如何输入第二个值 AND "user_id" = ?
??
目标是输出到 return nothing...
是的,你可以。另见 documentation link。
您缺少的关键是正确传递参数。查看用于传递变量的位置数组:.whereRaw('LOWER(cover_page) = ? AND LOWER(title) = ?', ['somepage', 'sometitle'])
(我还怀疑你不应该在这种情况下引用你的数据库字段。)
我还没有执行,但这应该很接近:
const doesExist = await db('articles')
.whereRaw('LOWER(cover_page) = ? OR LOWER(title) = ? OR LOWER(link) = ?',
[article.cover_page.toLowerCase(),
article.title.toLowerCase(),
article.link.toLowerCase()] )
.first();
PS:您也可以使用位置数组将参数传递给 raw()
,就像我在 whereRaw()
.