emiliopedrollo/laravel-postgres-extended-schema
| Install | |
|---|---|
composer require emiliopedrollo/laravel-postgres-extended-schema |
|
| Latest Version: | v5.1.0 |
| PHP: | ^8.0.2 |
| Laravel: | 12 · 13 |
| Older releases: | 5 – 11 |
| License: | MIT |
| Last Updated: | May 28, 2026 |
| Links: | GitHub · Packagist |
Laravel Postgres Extended
Introduction
An extended PostgreSQL driver for Laravel 9+ with support for some aditional PostgreSQL data types: hstore, uuid, geometric types (point, path, circle, line, polygon...) and support for WITH [RECURSIVE] clause
Installation
Simple run composer require emiliopedrollo/laravel-postgres-extended-schema in your project root directory.
Then you are done.
Usage
SELECT Queries
Use withExpression() and provide a query builder instance, an SQL string or a closure:
$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();
Use withRecursiveExpression() for recursive expressions:
$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();
You can provide the expression's columns as the third argument:
$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 Queries
You can use common table expressions in INSERT, UPDATE and DELETE queries:
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
You can use common table expressions in Eloquent queries.
$query = User::whereNull('parent_id')
->unionAll(
User::select('users.*')
->join('tree', 'tree.id', '=', 'users.parent_id')
);
$tree = User::from('tree')
->withRecursiveExpression('tree', $query)
->get();
Recursive Relationships
If you want to implement recursive relationships, you can use this package: staudenmeir/laravel-adjacency-list
Related Packages
Eager load pivot relations for Laravel Eloquent's BelongsToMany relation.
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v5.1.0 | ^8.0.2 | ^12.0 || | MIT | |
| v5.0.2 | ^8.0.2 | ^12.0 | MIT | |
| v5.0.1 | ^8.0.2 | ^12.0 | MIT | |
| v5.0.0 | ^8.0.2 | ^12.0 | MIT | |
| v4.11.1 | ^8.0.2 | ^9.0| | MIT | |
| v4.11.0 | ^8.0.2 | ^9.0| | MIT | |
| v3.1.1 | ^8.0.2 | ^9.0| | MIT | |
| v3.1.0 | ^8.0.2 | ^9.0| | MIT | |
| v3.0.0 | ^8.0.2 | ^9.0| | MIT | |
| v2.9.0 | ^7.3| | ^7.0| | MIT | |
| v2.8.3 | ^7.3| | ^7.0| | MIT | |
| 2.8.2 | ^7.3| | ^7.0| | MIT | |
| v2.8.1 | ^7.3| | ^7.0| | MIT | |
| v2.8.0 | ^7.3| | ^7.0| | MIT | |
| v2.7.0 | ^7.3| | ^7.0| | MIT | |
| v2.6.0 | ^7.3| | ^7.0| | MIT | |
| v2.5.0 | ^7.3| | ^7.0| | MIT | |
| v2.4.0 | ^7.3 | ^7.0| | MIT | |
| v2.3.0 | ^7.3 | ^7.0| | MIT | |
| v2.2.2 | ^7.3 | ^7.0| | MIT | |
| v2.2.1 | ^7.3 | ^6.0| | MIT | |
| v2.2.0 | ^7.3 | ^6.0| | MIT | |
| v2.1.0 | >=7.2 | ^6.0| | MIT | |
| v2.0.0 | >=7.2 | ^6.0 | MIT | |
| v1.2.3 | >=7.2 | ~5.7.0| | MIT | |
| v1.2.2 | >=7.2 | ~5.7.0| | MIT | |
| v1.2.1 | >=7.2 | ~5.7.0| | MIT | |
| v1.2.0 | >=7.2 | ~5.7.0| | MIT | |
| v1.1.0 | >=7.2 | ~5.7.0| | MIT | |
| v1.0.0 | >=7.2 | ~5.7.0| | MIT |
Showing the latest 30 of 49. See every release on Packagist
Pre-releases (4)
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v2.1.0-RC3 | >=7.2 | ^6.0| | MIT | |
| v2.1.0-RC2 | >=7.2 | ^6.0| | MIT | |
| v2.1.0-RC1 | >=7.2 | ^6.0 | MIT | |
| v2.0.0-RC1 | >=7.2 | ^6.0 | MIT |