我需要修改一个现有的查询,该查询获取具有相关项目的模型实例,以动态更改 where
子句,具体取决于是否提供了搜索词或提供了 ID。
如果我修改下面的原文:
return db.model('Users').where('id', userId)
.fetch({withRelated: [
'userNames.userMessages',
{
...
},
]}).then(function(user) {
为此,我得到错误 db.model(...).fetch is not a function
var query = db.model('Users')
.fetch({withRelated: [
'userNames.userMessages',
{
...
},
]});
if (userId) {
query.where('id', userId);
} else if (searchTerm) {
query.where('name', 'like', '%' + searchTerm + '%');
}
query.then(function(user) {
最佳答案
fetch()
需要 model instance ,由 new
、forge()
或其他查询的结果创建。 db.model('Users')
本身就像一个“类”,只有 Model static methods可用。
因此,您的动态查询的一种可能解决方案是:
var query = db.model('Users')
.collection()
.query(function(qb) {
if (userId) {
qb.where('id', userId);
} else if (searchTerm) {
qb.where('name', 'like', '%' + searchTerm + '%');
}
})
.fetch({withRelated: [
'userNames.userMessages',
{
...
},
]});
query.then(function(user) {
关于node.js - Node knex Bookshelf - 使用带 fetch 的动态 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42914841/