Node knex Bookshelf - 使用带 fetch 的动态 where 子句
Node knex Bookshelf - using dynamic where clause with fetch
我需要修改一个现有的查询,该查询获取具有相关项目的模型实例,以动态更改 where
子句,具体取决于是否提供了搜索词或提供了 ID。
如果我修改下面的原文:
return db.model('Users').where('id', userId)
.fetch({withRelated: [
'userNames.userMessages',
{
...
},
]}).then(function(user) {
为此,我收到错误 db.model(...)。fetch 不是函数
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, created by new
, forge()
or a result of some other query. db.model('Users')
alone is just like a "class", having only the 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) {
我需要修改一个现有的查询,该查询获取具有相关项目的模型实例,以动态更改 where
子句,具体取决于是否提供了搜索词或提供了 ID。
如果我修改下面的原文:
return db.model('Users').where('id', userId)
.fetch({withRelated: [
'userNames.userMessages',
{
...
},
]}).then(function(user) {
为此,我收到错误 db.model(...)。fetch 不是函数
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, created by new
, forge()
or a result of some other query. db.model('Users')
alone is just like a "class", having only the 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) {