Laravel QueryBuilder 中的 Postgres 函数 WITH
Posted
技术标签:
【中文标题】Laravel QueryBuilder 中的 Postgres 函数 WITH【英文标题】:Postgres function WITH in Laravel QueryBuilder 【发布时间】:2017-03-28 20:40:44 【问题描述】:请帮帮我。
我有原始 SQL
WITH collections AS (
SELECT
...
FROM
...
)
SELECT
...
FROM collections c1
LEFT JOIN collections c2
...
如何使用 Laravel QueryBuilder 编写它?
【问题讨论】:
Laravel QueryBuilder 不支持WITH
语法。您有 2 个选项:重写不带“WITH”的查询或使用接受原始 sql 查询的 DB::select()。
【参考方案1】:
您可以使用 Laravel 查询构建器 (https://laravel.com/docs/5.3/queries#raw-expressions) 的 RAW 方法。请小心潜在的 SQL 注入漏洞。
【讨论】:
现在我正在这样做:$queryResult = DB::select(" with collections AS (SELECT .....))"; 您可以发布您所做的整个查询语句吗?$queryResult = DB::select(" with collections AS ( SELECT tcm.shop_id, ... FROM template_collection_menu AS tcm LEFT JOIN template_collection AS tc ON tc.id = tcm.template_collection_id WHERE tcm.shop_id IN (:mainShopId, :currentShopId) ORDER BY tcm.position ASC ) SELECT COALESCE(c2.shop_id, c1.shop_id) as shop_id, ... FROM collections c1 LEFT JOIN collections c2 ON c2.template_collection_id = c1.template_collection_id AND c1.shop_id = :mainShopId AND c2.shop_id = :currentShopId WHERE c1.shop_id = :mainShopId ", ['mainShopId' => $mainShopId,...]);
您查看过我提供的网址吗?您必须使用 DB::raw 而不是 DB::select。
@IlyaPoluhin,您可以像这样使用 DB::raw DB::raw('SELECT * FROM table...)以上是关于Laravel QueryBuilder 中的 Postgres 函数 WITH的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 使用 QueryBuilder 时如何避免页面重新加载
Laravel Eloquent 相当于 QueryBuilder 查询
Laravel QueryBuilder - 相同查询的 `where()` 和 `whereRaw()` 结果不同
Laravel 如何获取数组而不是 QueryBuilder select() 语句的对象?
Laravel spatie QueryBuilder GET 请求搜索
Laravel 6,MYSQL - 如何使用 Laravel Querybuilder 或 Model Eloquent 将子查询与 GroupBY 左连接?