实际上我有这个查询,它返回数据库中的所有用户:
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')])
我在文档中找不到解释我如何有条件地在哪里创建内容的内容。有人可以解释我吗?
尝试过:
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不是函数
答案 0 :(得分:2)
实际上,如果您查看文档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
}
答案 1 :(得分:2)
我在@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
}