1

I have this query that have to select all books filtering by a description ignoring uppercase/lowercase.

So I make this query in adonis.js / node.js:

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

I have records with this bookDescription:

"Espanhol for Students ed.1 "

But when I try to filter using only "es" in lowercase, the knex don't return any record.

When I put "Es", return the book with the description that I put, so, the like %es% is not working.

I put one debug and I catch this:

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

Apparently I don't find any wrong, but I think the like must return the record in lowercase..

I'm forgetting something?

Steve Friedl
  • 3,929
  • 1
  • 23
  • 30
bla
  • 995
  • 3
  • 11
  • 44

4 Answers4

8

You can use like this

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

or


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

More Info. view knexjs docuemnts

Amit Kadivar
  • 798
  • 4
  • 12
4

For case insensitive search you can use following like query

const queryBook = Book
        .query()
        .with('user')
queryBook.whereRaw(`LOWER(description) LIKE ?`, [`%${bookDescription[0]}%`])
Ankur Patel
  • 478
  • 3
  • 6
0

if you are using latest knexjs (> 1.x.x) one can use whereIlike or orWhereILike

const result = await select('*').from('books').whereILike('description',`${'%'+searchterm+'%'}`)


        
krishnazden
  • 1,127
  • 10
  • 19
0

you can use this best way

knex.whereILike('name',`%${search.toLowerCase()}%`);