Knex Query with Like + '%' не работает - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть этот запрос, который должен выбрать все книги, отфильтрованные по описанию, игнорируя прописные / строчные буквы.

Поэтому я делаю этот запрос в adonis.js / node.js:

 const queryBook = Book
            .query()
            .with('user')
 queryBook.where('description', 'like', '%'+bookDescription[0]+'%')

У меня есть записи с этим bookDescription:

«Espanhol for Students ed.1»

Но когда я пытаюсь фильтровать, используя только «es» в нижнем регистре,knex не возвращает никаких записей.

Когда я ставлю «Es», возвращаю книгу с описанием, которое я поместил, так что% es% не работает.

Iпоставь одну отладку и я поймаю это:

knex:query select * from "books" where "description" like ? limit ? undefined +7ms
knex:bindings [ '%es%', 10 ] undefined +6ms

Видимо, я не нахожу ничего плохого, но я думаю, что like должен вернуть запись в нижнем регистре ..

Ячто-то забыл?

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Для поиска без учета регистра вы можете использовать следующий запрос:

const queryBook = Book
        .query()
        .with('user')
queryBook.whereRaw(`LOWER(description) LIKE ?`, [`%${bookDescription[0]}%`])
1 голос
/ 05 ноября 2019

Вы можете использовать как это

const queryBook = Book
            .query()
            .with('user')
 queryBook.where('description', 'like', `%${bookDescription[0]}%`)

или


const queryBook = Book
            .query()
            .with('user')
 queryBook.where('description', 'ilike', `%${bookDescription[0]}%`)

Подробнее. view knexjs docuemnts

...