“db.model(...)。whereIn不是db.Model(...)的函数.whereIn()

时间:2017-03-06 04:16:14

标签: node.js knex.js

我需要更改knex的遗留部分以动态接受单个值或数组。

我不想改变现有的查询,因为应用程序的其他部分依赖它。

添加ids instanceof Array || (ids = [ids]);并将where更改为whereIn,我认为我可以获得一个或多个返回值,但我得到错误

  

未处理拒绝TypeError:db.model(...)。whereIn不是函数

当我将单个值传递给where子句但不会传递给whereIn时,这是有效的,为什么会这样?

User模型中:

  byId: function(ids) {
    ids instanceof Array || (ids = [ids]);
    return db.knex('User')
      .whereIn('id', ids)
      .fetch()
      .then(function(users) {
        return users.toJSON();
      });
  },

原创(工作):

  byId: function(id) {
    return db.knex('User')
      .where('id', id)
      .fetch()
      .then(function(user) {
        return user.toJSON();
      });
  },

注意:使用db.knex.select().from('tablename')选择模型工作,但直接使用db.knex('ModelName')则不然。为什么呢?

  byIds: function(ids) {
    ids instanceof Array || (ids = [ids]);
    return db.knex.select('*')
      .from('users')
      .whereIn('id', ids);
  },

1 个答案:

答案 0 :(得分:0)

这不起作用.whereIn('id', ids)是.where('id','in',obj)必须是数组的简写。检查此行ids instanceof Array || (ids = [ids]); 首先尝试一个虚拟数组:[4, 5, 6]