【发布时间】:2016-12-21 08:26:58
【问题描述】:
在一个项目中,我在 Postgres 中使用公用表表达式 (CTE) 来对表进行递归表达式。递归表达式计算出父级下的所有子行。
我正在使用带有查询构建器的 Laravel 框架来编写此查询。我想避免原始查询。我正在寻找一种在查询构建器语法中链接 CTE 的方法,但我最终得到了一个原始查询 (DB::select('raw query here'))。
有没有办法可以链接 CTE 部分?如下伪代码:
DB::statement('WITH RECURSIVE included_parts(sub_part, part, quantity) AS (
SELECT sub_part, part, quantity FROM parts WHERE part = 'our_product'
UNION ALL
SELECT p.sub_part, p.part, p.quantity
FROM included_parts pr, parts p
WHERE p.part = pr.sub_part')
->select('subpart')
->table('included_parts')
->join('bar', 'foo.id', '=', 'bar.foo_id')
->etc etc more query expressions
【问题讨论】:
-
嗨,你有没有找到解决办法?我在这里也有类似的问题:stackoverflow.com/questions/43749046/…
-
您必须为此使用原始查询。 Eloquent/query builder 支持多个 DBMS,并提供没有特定 DBMS 功能的通用层,以实现最大的兼容性。 CTE 在 postgres 中是一个强大的功能,但其他 DBMS 不支持它。
-
@Chris mysql 8 似乎支持 CTE
标签: postgresql laravel-5 common-table-expression