我需要更改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);
},
答案 0 :(得分:0)
这不起作用.whereIn('id', ids)
是.where('id','in',obj)必须是数组的简写。检查此行ids instanceof Array || (ids = [ids]);
首先尝试一个虚拟数组:[4, 5, 6]