emiliopedrollo / laravel-postgres-extended-schema
Eloquent 扩展,增加了某些 PostgreSQL 功能
v4.11.1
2024-06-28 19:43 UTC
Requires
- php: ^8.0.2
- ext-pdo: *
- doctrine/dbal: ^2.12|^3.0
- illuminate/database: ^9.0|^10.0|^11.0
- ramsey/uuid: ^3.9.2|^4.0
Requires (Dev)
- illuminate/container: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
- mockery/mockery: ^1.4.2
- phpunit/phpunit: ^9.3
- dev-master
- v4.11.1
- v4.11.0
- v3.1.1
- v3.1.0
- v3.0.0
- v2.9.0
- v2.8.3
- 2.8.2
- v2.8.1
- v2.8.0
- v2.7.0
- v2.6.0
- v2.5.0
- v2.4.0
- v2.3.0
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.0
- v2.1.0-RC3
- v2.1.0-RC2
- v2.1.0-RC1
- v2.0.0
- v2.0.0-RC1
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.0
- 0.19
- 0.18
- 0.17
- 0.16
- 0.15
- 0.14
- 0.13
- 0.12
- 0.11
- 0.10
- 0.9
- 0.8
- 0.7
- 0.6
- 0.5
- 0.4
- 0.3
- 0.2
- 0.1
This package is auto-updated.
Last update: 2024-09-28 20:14:49 UTC
README
介绍
Laravel 9+ 的扩展 PostgreSQL 驱动程序,支持一些额外的 PostgreSQL 数据类型:hstore、uuid、几何类型(点、路径、圆、线、多边形...)以及支持 WITH [RECURSIVE] 子句
安装
在项目根目录简单运行 composer require emiliopedrollo/laravel-postgres-extended-schema
。
这样就完成了。
使用方法
SELECT 查询
使用 withExpression()
并提供一个查询构建器实例、一个 SQL 字符串或一个闭包
$posts = DB::table('p') ->select('p.*', 'u.name') ->withExpression('p', DB::table('posts')) ->withExpression('u', function ($query) { $query->from('users'); }) ->join('u', 'u.id', '=', 'p.user_id') ->get();
使用 withRecursiveExpression()
进行递归表达式
$query = DB::table('users') ->whereNull('parent_id') ->unionAll( DB::table('users') ->select('users.*') ->join('tree', 'tree.id', '=', 'users.parent_id') ); $tree = DB::table('tree') ->withRecursiveExpression('tree', $query) ->get();
您可以将表达式的列作为第三个参数提供
$query = 'select 1 union all select number + 1 from numbers where number < 10'; $numbers = DB::table('numbers') ->withRecursiveExpression('numbers', $query, ['number']) ->get();
INSERT/UPDATE/DELETE 查询
您可以在 INSERT
、UPDATE
和 DELETE
查询中使用公用表表达式
DB::table('profiles') ->withExpression('u', DB::table('users')->select('id', 'name')) ->insertUsing(['user_id', 'name'], DB::table('u'));
DB::table('profiles') ->withExpression('u', DB::table('users')) ->join('u', 'u.id', '=', 'profiles.user_id') ->update(['profiles.name' => DB::raw('u.name')]);
DB::table('profiles') ->withExpression('u', DB::table('users')->where('active', false)) ->whereIn('user_id', DB::table('u')->select('id')) ->delete();
Eloquent
您可以在 Eloquent 查询中使用公用表表达式
$query = User::whereNull('parent_id') ->unionAll( User::select('users.*') ->join('tree', 'tree.id', '=', 'users.parent_id') ); $tree = User::from('tree') ->withRecursiveExpression('tree', $query) ->get();
递归关系
如果您想实现递归关系,可以使用此包:[staudenmeir/laravel-adjacency-list](https://github.com/staudenmeir/laravel-adjacency-list)