【问题标题】:How i can make where inside a relationship in adonis?我怎样才能在阿多尼斯的关系中取得进展?
【发布时间】:2019-11-15 19:42:31
【问题描述】:

我有这个问题:

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 相关的所有书籍单元问题、用户和我收到的带有参数 (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 子句条目 “书单元”

【问题讨论】:

    标签: node.js adonis.js


    【解决方案1】:

    你就快到了,在 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)
        })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-20
      • 2023-03-22
      • 1970-01-01
      • 2023-03-25
      • 2016-02-05
      • 2017-03-30
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多