首页 > 解决方案 > 如何在 Objection/Knex 中使用“joinEager”和原始 sql 查询?

问题描述

我设法编写了一个原始查询,它允许我获取一个类别中的所有产品,甚至是该类别子类别中的产品,一直沿树向下。

我正在使用原始查询,因为我不知道如何使用反对/ knex api 来做到这一点。

我遇到的问题是我还想加入相关表,在这种情况下,对于我的产品,我有“products_meta”和“categories”

尽管我知道我可以简单地修改原始查询来做到这一点,但我想知道是否有更简单的方法通过使用一些反对/knex 方法,比如 joinEager。

到目前为止,我的代码看起来像这样:(下面的 sql 字符串只是获取一个类别及其子类别中的所有产品,这不是问题)

 const sql = `
                with recursive get_subcols as(
                    select id
                    from collections
                    where "parentId" = ${req.params.id}
                    union all
                    select c.id
                    from collections as c
                    inner join get_subcols gs
                    on c."parentId" = gs.id
                ), get_all_collections as (
                    select id from collections
                    where id = ${req.params.id}
                    union
                    select * from get_subcols
                ), get_all_products as (
                    select p.*, c.name as collection
                    from products as p
                    join "collectionProducts" cp
                    on cp."productId" = p.id
                    join get_all_collections gac
                    on cp."collectionId" = gac.id
                    left join collections as c
                    on cp."collectionId" = c.id
                )

                select * from get_all_products;
            `

            const result = await Collection.knex().raw(sql)
            const products =  result.rows

我的问题是,是否有可能做这样的事情:

.joinEager('[meta, collections]')

到结果,所以我也可以加入结果中的相关表?

标签: sqlnode.jsknex.jspostgresql-9.5objection.js

解决方案


推荐阅读