etbusch/postgres-ctes

Laravel插件,为Eloquent查询构建器提供对PostgreSQL公共表表达式的原生支持。

安装: 6

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 0

开放问题: 0

类型:package

dev-master 2019-03-31 20:07 UTC

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();