我有这个查询:
const filter = request.input('filter')
const queryBookQuestions = BookUnitQuestion
.query()
.with('book_unit')
.with('user')
.with('book', (builder) => {
builder.where('id', request.params.id)
})
在此查询中,我返回与对象book_unit相关的所有书单位问题,用户和我通过params(request.params.id)收到的书。
现在我需要过滤单元。我实际上有这个过滤器,可以在“说明”中找到位置:
if(filter){
if(filter.search("description") !== -1){
let description = filter.match(/(?<=description~contains~').*?(?=')/)
queryBookQuestions.where('description', 'ilike', '%'+description[0]+'%')
}
此过滤器运行良好,但是他直接在BookUnitQuestion模型中应用。但是现在,我需要制作一个按单位过滤的过滤器,例如:
if(filter.search("unit") !== -1){
let unit = request.input('filter').match(/(?<=unit~contains~').*?(?=')/)
queryBookQuestions.where('book_unit.unit', unit[0])}
}
但这不起作用,因为book_unit是book_unit_question内部的对象数组。 当我尝试以这种方式进行过滤时,我收到:
从“ book_unit_question”中选择count(*)作为“ total”,其中 “ book_unit”。“ unit” = $ 1-缺少表的FROM子句条目 “ book_unit”
答案 0 :(得分:0)
你快到了,在 with('book_unit') 之后你可以:
filter = request.input('filter')
const queryBookQuestions = BookUnitQuestion
.query()
.with('book_unit')
.whereHas('book_unit', (builder) => {
...your filter here
})
.with('user')
.with('book', (builder) => {
builder.where('id', request.params.id)
})