[英]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.