A set of advanced Eloquent macros for Laravel.
You can install this package via Composer:
composer require reinink/advanced-eloquent
This package uses auto-discovery, so there is no further configuration required.
$column
must be a string.$query
must either be an instance ofIlluminate\Database\Query\Builder
orIlluminate\Database\Eloquent\Builder
.
$query
must either be an instance ofIlluminate\Database\Query\Builder
orIlluminate\Database\Eloquent\Builder
.$direction
must either be'asc'
or'desc'
.$nullPosition
must either benull
,'first'
or'last'
.
$query
must either be an instance ofIlluminate\Database\Query\Builder
orIlluminate\Database\Eloquent\Builder
.$nullPosition
must either benull
,'first'
or'last'
.
$query
must either be an instance ofIlluminate\Database\Query\Builder
orIlluminate\Database\Eloquent\Builder
.$nullPosition
must either benull
,'first'
or'last'
.
Note: Null positions (NULLS FIRST
and NULLS LAST
) are not supported by all databases (ie. MySQL and SQLite), but are supported by PostgreSQL and others.
Get a user's last login date using a subquery:
$users = User::addSubSelect('last_login_at', Login::select('created_at')
->whereColumn('user_id', 'users.id')
->latest()
)->get();
Same example as above, except using the query builder instead:
$users = DB::table('users')->addSubSelect('last_login_at', DB::table('logins')
->select('created_at')
->whereColumn('user_id', 'users.id')
->latest()
)->get()
Order users by their company name using a subquery:
$users = User::orderBySub(Company::select('name')->whereColumn('company_id', 'companies.id'))->get();
Order users by their last login date, with null values last:
$users = User::addSubSelect('last_login_at', Login::select('created_at')
->whereColumn('user_id', 'users.id')
->latest()
)->orderBySubDesc(Login::select('created_at')
->whereColumn('user_id', 'users.id')
->latest(), 'last'
)->get();