вставить более 1 значение, используя knex с raw - PullRequest
0 голосов
/ 06 февраля 2019

Я просмотрел knex docs и перепробовал все возможные комбинации, которые смог найти, но безуспешно.Тем не менее, используя 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" = ? ??

Цель состоит в том, чтобы вывод ничего не возвращал ...

1 Ответ

0 голосов
/ 07 февраля 2019

Да, вы можете.См. Также ссылка на документацию .

Ключ, который вам не хватает, правильно передает параметры.Посмотрите позиционный массив для передачи переменных: .whereRaw('LOWER(cover_page) = ? AND LOWER(title) = ?', ['somepage', 'sometitle'])

(я также подозреваю, что вы не должны заключать в кавычки поля вашей базы данных в этом контексте.)

Я не выполнил это, но это должно бытьclose:

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().

...