当我在adonis.js / node中收到查询参数时,如何在有条件的地方添加位置?

时间:2019-10-29 13:10:19

标签: node.js adonis.js

实际上我有这个查询,它返回数据库中的所有用户:

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不是函数

2 个答案:

答案 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
}