lorisleiva/laravel-add-select
| Install | |
|---|---|
composer require lorisleiva/laravel-add-select |
|
| Latest Version: | v0.1.4 |
| License: | MIT |
| Last Updated: | Dec 3, 2020 |
| Links: | GitHub · Packagist |
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
laravel-paypalpayment is simple package help you process direct credit card paym...
Powerful PHP database abstraction layer (DBAL) with many features for database s...