当我在 adonis.js/node 中收到查询参数时,如何有条件地添加 where's?
How i can add where's conditionally when i receive query params in adonis.js/node?
实际上我有这个查询 returns 数据库中的所有用户:
async index({request}) {
const page = request.input('page')
const pageSize = request.input('pageSize')
const users = await User
.query()
.with('user')
.paginate(page, pageSize)
return users.toJSON()
}
如果我收到参数,我需要有条件地创建一种方法来放置此查询中的位置。
例如,如果我收到 request.input('username') 附加一个,其中:
.whereRaw('username = %?%', [request.input('username')])
我在文档中没有找到解释我如何有条件地创建 where's 的内容。有人可以解释一下吗?
尝试过:
async index({request}) {
const page = request.input('page')
const pageSize = request.input('pageSize')
const queryUsers = await User
.query()
.with('user')
.paginate(page, pageSize)
if(request.input('username'))
queryUsers.where('username = %?%', [request.input('username')])
return queryUsers.toJSON()
}
但我收到:
queryUsers.where is not a function
实际上,如果您查看文档的这一部分 Query Builder,您会发现您的查询不是 运行,直到您 运行 .fetch()
或您的情况.paginate()
。您的代码将是这样的:
async index({request}) {
const { page, pageSize } = request.get();
const queryUsers = User
.query()
.with('user')
if(request.input('username'))
queryUsers.where('username', '=', request.input('username'))
const users = await queryUsers.paginate(page, pageSize)
return users
}
我在@VladNeacsu 的帮助下修复了问题,我的最终代码是这样的:
async index({request}) {
const { page, pageSize } = request.get();
const queryUsers = User
.query()
.with('user')
if(request.input('username'))
queryUsers.where('username', '=', request.input('username'))
const users = await queryUsers.paginate(page, pageSize)
return users
}
您可以使用 if
助手来编写更简洁的版本,documented here。
async index({request}) {
const { page, pageSize } = request.get();
const username = request.input('username')
const users = await User
.query()
.with('user')
.if(!!username, (query) => {
query.where('username', '=', username)
})
.paginate(page, pageSize)
return users
}
实际上我有这个查询 returns 数据库中的所有用户:
async index({request}) {
const page = request.input('page')
const pageSize = request.input('pageSize')
const users = await User
.query()
.with('user')
.paginate(page, pageSize)
return users.toJSON()
}
如果我收到参数,我需要有条件地创建一种方法来放置此查询中的位置。
例如,如果我收到 request.input('username') 附加一个,其中:
.whereRaw('username = %?%', [request.input('username')])
我在文档中没有找到解释我如何有条件地创建 where's 的内容。有人可以解释一下吗?
尝试过:
async index({request}) {
const page = request.input('page')
const pageSize = request.input('pageSize')
const queryUsers = await User
.query()
.with('user')
.paginate(page, pageSize)
if(request.input('username'))
queryUsers.where('username = %?%', [request.input('username')])
return queryUsers.toJSON()
}
但我收到:
queryUsers.where is not a function
实际上,如果您查看文档的这一部分 Query Builder,您会发现您的查询不是 运行,直到您 运行 .fetch()
或您的情况.paginate()
。您的代码将是这样的:
async index({request}) {
const { page, pageSize } = request.get();
const queryUsers = User
.query()
.with('user')
if(request.input('username'))
queryUsers.where('username', '=', request.input('username'))
const users = await queryUsers.paginate(page, pageSize)
return users
}
我在@VladNeacsu 的帮助下修复了问题,我的最终代码是这样的:
async index({request}) {
const { page, pageSize } = request.get();
const queryUsers = User
.query()
.with('user')
if(request.input('username'))
queryUsers.where('username', '=', request.input('username'))
const users = await queryUsers.paginate(page, pageSize)
return users
}
您可以使用 if
助手来编写更简洁的版本,documented here。
async index({request}) {
const { page, pageSize } = request.get();
const username = request.input('username')
const users = await User
.query()
.with('user')
.if(!!username, (query) => {
query.where('username', '=', username)
})
.paginate(page, pageSize)
return users
}