lorisleiva/laravel-add-select

5,468 32
Install
composer require lorisleiva/laravel-add-select
Latest Version:v0.1.4
Laravel:5 – 8
License:MIT
Last Updated:Dec 3, 2020
Links: GitHub  ·  Packagist
Maintainer: lorisleiva

Laravel Add Select

🧱 Add subSelect queries to your Laravel models using dynamic methods.

If you're not familiar with subSelect queries, I strongly recommend this article by Johnathan Reinink.

Installation

composer require lorisleiva/laravel-add-select

Usage

Consider two Eloquent models Book and Chapter such that a book can have multiple chapters.

By using the AddSubSelects trait, you can now add subSelect queries to the Book model by following the naming convention add{NewColumnName}Select. For example, the following piece of code add two new subSelect queries to the columns last_chapter_id and latest_version.

class Book extends Model
{
    use AddSubSelects;

    public function addLastChapterIdSelect()
    {
        return Chapter::select('id')
            ->whereColumn('book_id', 'books.id')
            ->latest();
    }

    public function addLatestVersionSelect()
    {
        return Chapter::select('version')
            ->whereColumn('book_id', 'books.id')
            ->orderByDesc('version');
    }
}

Now, you can eager-load these subSelect queries using the withSelect method.

Book::withSelect('last_chapter_id', 'latest_version')->get();

You can also eager-load models that are already in memory using the loadSelect method. Note that this method will load all provided subSelect queries in one single database query.

$book->loadSelect('last_chapter_id', 'latest_version');

If you haven't eager-loaded these subSelect queries in a model, you can still access them as attributes. The first time you access them, They will cause a new database query but the following times they will be available in the model's attributes.

$book->last_chapter_id;
$book->latest_version;

Finally, you can gloabally eager-load these subSelect queries by setting up the withSelect property on the Eloquent model.

class Book extends Model
{
    use AddSubSelects;

    public $withSelect = ['last_chapter_id', 'latest_version'];
}

Related Packages

doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database s...

644,549,754 9,698
laravel/framework

The Laravel Framework.

598,760,099 34,966
laravel/tinker

Powerful REPL for the Laravel framework.

507,193,856 7,441
laravel/serializable-closure

Laravel Serializable Closure provides an easy and secure way to serialize closur...

423,477,751 607
nunomaduro/collision

Cli error handling for console/command-line PHP applications.

399,241,428 4,660

Version History

Version Released Laravel License
v0.1.4 ^5.8|^6.0|^7.0|^8.0 MIT
v0.1.3 ^5.8|^6.0|^7.0 MIT
v0.1.2 5.8.*|^6.0 MIT
v0.1.1 5.8.*|^6.0 MIT
v0.1 5.8.*|^6.0 MIT