mysql - Sequelize LIKE 不适用于 WHERE 子句

标签 mysql node.js sequelize.js sql-like

我正在将 Sequelize 与 Node.js 一起使用。下面是我的代码。 Like 条件不适用于 where 条件。我正在尝试添加按公司名称搜索。

   let err, company;
   console.log(req.body);
   [err, company] = await to(Company.findAll({where : {company_name:{ $like: '%'+req.body.q+'%' }}}));  
   if(err){ return ReE(res, err); } 
   console.log(' company -------------- ',err);

我收到以下错误。

{ q: 'abc' }
 company --------------  { filename:
'/MYPATH/node_modules/sequelize/lib/sql-string.js',
  line: 51,
  row: 11,
  message: 'Invalid value { company_name: { \'$like\': \'%abc%\' } }',
  type: 'Error',
  stack:
   'Error: Invalid value { company_name: { \'$like\': \'%abc%\' } }\n    
   at Object.escape (/MYPATH/node_modules/sequelize/lib/sql-string.js:51:11)\n   
   at Object.escape (/MYPATH/node_modules/sequelize/lib/dialects/abstract/query-generator.js:927:22)\n   
   at Object._whereParseSingleValueObject (/MYPATH/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2396:41)\n   
   at Object.whereItemQuery (/MYPATH/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2096:21)\n    
   at Utils.getComplexKeys.forEach.prop (/MYPATH/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1957:25)\n    
   at Array.forEach (<anonymous>)\n    
   at Object.whereItemsQuery (/MYPATH/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1955:35)\n    
   at Object.getWhereConditions (/MYPATH/node_modules/sequelize/lib/dialects/abstract/query-generator.js:2423:19)\n    
   at Object.selectQuery (/MYPATH/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1133:28)\n   
   at QueryInterface.select (/MYPATH/node_modules/sequelize/lib/query-interface.js:1077:27)\n    
   at Promise.try.then.then.then (/MYPATH/node_modules/sequelize/lib/model.js:1596:34)\n    
   at tryCatcher (/MYPATH/node_modules/bluebird/js/release/util.js:16:23)\n   
   at Promise._settlePromiseFromHandler (/MYPATH/node_modules/bluebird/js/release/promise.js:512:31)\n    
   at Promise._settlePromise (/MYPATH/node_modules/bluebird/js/release/promise.js:569:18)\n    
   at Promise._settlePromise0 (/MYPATH/node_modules/bluebird/js/release/promise.js:614:10)\n    
   at Promise._settlePromises (/MYPATH/node_modules/bluebird/js/release/promise.js:693:18)\n    
   at Async._drainQueue (/MYPATH/node_modules/bluebird/js/release/async.js:133:16)\n    
   at Async._drainQueues (/MYPATH/node_modules/bluebird/js/release/async.js:143:10)\n    
   at Immediate.Async.drainQueues [as _onImmediate] (/MYPATH/node_modules/bluebird/js/release/async.js:17:14)\n    
   at runCallback (timers.js:705:18)\n    at tryOnImmediate (timers.js:676:5)\n    at processImmediate (timers.js:658:5)',
  arguments: undefined }

最佳答案

在文件顶部添加 const Op = Sequelize.Op; 并将“Sequelize”导入到文件中。

import { Sequelize } from 'sequelize';

const Op = Sequelize.Op;

const companies = await to(Company.findAll({where : {company_name:{ [Op.like]: '%'+req.body.q+'%' }}}));
return companies;

关于mysql - Sequelize LIKE 不适用于 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54346526/

相关文章:

php - MySQL大于日期返回小于给定日期的日期

mysql - 如何在mysql中使用order by date获取两个表的详细信息

node.js - 自托管 Meteor App 光纤问题

javascript - 如何在 Sequelize.then 中执行 bcrypt.compare?

javascript - Sequelize/postgres : Get records matching a value inside an array of object with a provided value

php - 捕获动态表中 HTML 元素的值

java - JSON 解析问题未解决

javascript - NW.js : If both arrays are equal not working

node.js - 如何获取 nginx 中的 server_name 用作 Node 中的服务器变量

javascript - 为什么在 NodeJS 中返回对象而不是计数 sequelize.js