📜  knex 搜索就像不工作 (1)

📅  最后修改于: 2023-12-03 15:02:31.687000             🧑  作者: Mango

Knex 搜索似乎无法工作

在使用Knex时,经常遇到搜索不工作的问题。这可能是因为在搜索方面有一些常见的错误。在本文中,我们将探讨这些常见的错误,并提供解决这些错误所需的解决方案。

1. 搜索不区分大小写

默认情况下,Knex的搜索不区分大小写。这意味着如果您搜索“John Doe”和“john doe”,结果将相同。解决此问题的一种方法是使用SQL中的LOWER函数将所有搜索条件转换为小写字母。

knex('table_name')
  .whereRaw('LOWER(column_name) like ?', `%${searchTerm.toLowerCase()}%`)
  .then(results => {
    console.log(results);
  })

在上面的代码中,我们使用whereRaw()函数将LOWER函数嵌入搜索条件中。这样,我们就可以将搜索项和列名都转换为小写字母。

2. 忘记使用“%”搜索通配符

在Knex中执行LIKE搜索时,需要使用“%”通配符来搜索一个字符串的一部分。在某些情况下,您可能会忘记在搜索条件中使用“%”通配符,这将导致搜索无法正确工作。

knex('table_name')
  .where('column_name', 'like', searchTerm) // Missing "%" wildcard characters
  .then(results => {
    console.log(results);
  })

为了解决此问题,只需将百分号通配符添加到搜索条件中即可。

knex('table_name')
  .where('column_name', 'like', `%${searchTerm}%`)
  .then(results => {
    console.log(results);
  })
3. 错误地使用AND和OR运算符

当我们需要在Knex中进行多个搜索条件时,我们需要使用AND和OR运算符。但是,如果我们没有正确地使用这些运算符,则可能会导致搜索不起作用。

例如,在以下代码中,我们想要查找名称包含“John”并且电话号码包含“123”的行。但是在代码中,我们错误地把OR运算符用于电话号码,而不是用AND运算符:

knex('table_name')
  .where('name', 'like', '%John%')
  .orWhere('phone', 'like', '%123%') // Incorrect use of OR operator
  .then(results => {
    console.log(results);
  })

为了解决此问题,我们需要改为使用AND运算符。

knex('table_name')
  .where('name', 'like', '%John%')
  .andWhere('phone', 'like', '%123%') // Correct use of AND operator
  .then(results => {
    console.log(results);
  })

这样,我们就可以正确地使用AND和OR运算符,以实现正确的搜索功能。

总之,以上错误是常见的Knex搜索错误。通过遵循这些最佳实践,我们可以轻松地解决这些错误,从而使用Knex实现正确的搜索功能。