簡體   English   中英

當我在 adonis.js/node 中收到查詢參數時,如何有條件地添加 where?

[英]How i can add where's conditionally when i receive query params in adonis.js/node?

實際上我有這個查詢返回數據庫中的所有用戶:

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') append 一個,其中:

.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 不是 function

實際上,如果您查看文檔查詢生成器的這一部分,您會發現您的查詢在您運行.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幫助程序編寫更簡潔的版本, 記錄在此處

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM