Как использовать "joinEager" вместе с необработанным SQL-запросом в Objection / Knex? - PullRequest
0 голосов
/ 15 января 2019

Мне удалось написать необработанный запрос, который позволил бы мне получить все продукты внутри категории, даже продукты внутри подкатегорий категории, вплоть до дерева.

Я использую необработанный запрос, потому что я не знал, как использовать для этого / knex api.

Проблема, с которой я столкнулся, заключается в том, что я также хочу присоединиться к соответствующим таблицам, в данном случае для моих продуктов у меня есть "products_meta" и "category"

Несмотря на то, что я знаю, что могу просто изменить необработанный запрос, я хотел бы знать, существует ли более простой способ с использованием некоторых методов возражения / 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]')

к результатам, чтобы я также мог объединить связанные таблицы в результате?

...