New

Just launched: Vueblocks, a brand-new search engine for Vue packages! Explore Vueblocks →

emiliopedrollo/laravel-postgres-extended-schema

Eloquent Extended, added some PostgreSQL features
5,786
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
Maintainer: emiliopedrollo

Laravel Postgres Extended

Build Status Maintainability Latest Stable Version Total Downloads Monthly Downloads License License

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

rits-tecnologia/eloquent-insert-on-conflict

Macros for INSERT ON CONFLICT with Eloquent

4,178 1
mammutgroup/database

Eloquent Extended, added some PostgreSQL features

109 1
yadakhov/insert-on-duplicate-key

A trait for MySQL INSERT ON DUPLICATE KEY UPDATE.

3,123,272 275
audunru/eager-load-pivot-relations

Eager load pivot relations for Laravel Eloquent's BelongsToMany relation.

76,692 9
someonefamous/laravel-findby

Extended 'find' functionality for Eloquent (Laravel).

11,658 3

Version History

Version Released PHP Laravel License
v5.1.0 ^8.0.2 ^12.0 || ^13.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|^10.0|^11.0 MIT
Pre-releases (4)
Version Released PHP Laravel License
v2.1.0-RC3 >=7.2 ^6.0|^7.0 MIT
v2.1.0-RC2 >=7.2 ^6.0|^7.0 MIT
v2.1.0-RC1 >=7.2 ^6.0 MIT
v2.0.0-RC1 >=7.2 ^6.0 MIT