etbusch / postgres-ctes
Laravel插件,为Eloquent查询构建器提供对PostgreSQL公共表表达式的原生支持。
dev-master
2019-03-31 20:07 UTC
Requires
- php: >=5.6
This package is auto-updated.
Last update: 2024-09-29 05:02:15 UTC
README
此包为Laravel 5.4+和Lumen 5的基础PostgreSQL驱动程序添加了公共表表达式支持。
安装
通过Composer和本地git仓库
将仓库克隆到您的服务器/工作站上的本地目录。
将以下内容添加到您的应用composer.json文件中
"repositories": [{ "type": "vcs", "url": "path/to/postgres-ctes" }]
然后运行
$ composer require etbusch\postgres-ctes
通过Composer和Packagist
只需运行
$ composer require etbusch\postgres-ctes
一旦composer已更新且包已安装,需要加载服务提供者。
对于Lavavel 5.5+,包将自动发现所需的服务提供者,因此无需额外步骤。
对于Laravel 5.4,打开config/app.php
并在提供者数组中添加以下行
Etbusch\PostgresCtes\PostgresCtesServiceProvider::class,
对于Lumen 5,打开bootstrap/app.php
并在“注册服务提供者”部分下添加以下行
$app->register(Etbusch\PostgresCtes\PostgresCtesServiceProvider::class);
使用方法
一旦包含服务提供者,Laravel/Lumen将开始使用自定义语法,
QueryBuilder::cte($as, Closure $query)方法将在您的模型中使用。CTE以第一个参数命名,查询本身以闭包或原始SQL字符串的形式表示。
基本示例
$query = new FooModel(); $data = $query->cte('cte_query_name', function ($query) { $query->select('foo') ->from('bar') ->selectRaw('count(*) as total') ->selectRaw('count(case when foo_bar = 1 then 1 end) AS Low') ->selectRaw('count(case when foo_bar = 2 then 1 end) AS Medium') ->selectRaw('count(case when foo_bar = 3 then 1 end) AS High') ->groupBy('foo'); }) ->from('cte_query_name') ->limit(20) ->get();
查询范围示例
// Model Scope Method public function scopeCteQueryName($query){ $cte = DB::table('foo') ->select('foo') ->from('bar') ->selectRaw('count(*) as total') ->selectRaw('count(case when foo_bar = 1 then 1 end) AS Low') ->selectRaw('count(case when foo_bar = 2 then 1 end) AS Medium') ->selectRaw('count(case when foo_bar = 3 then 1 end) AS High') ->groupBy('foo'); $query->cte('cte_query_name',$cte); return $query; } // Usage $query = new FooModel(); $data = $query->CteQueryName() ->from('cte_query_name') ->limit(10) ->get();