Package Data | |
---|---|
Maintainer Username: | reinink |
Maintainer Contact: | jonathan@reinink.ca (Jonathan Reinink) |
Package Create Date: | 2018-11-22 |
Package Last Update: | 2020-07-07 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-12-15 15:00:17 |
Package Statistics | |
---|---|
Total Downloads: | 382,749 |
Monthly Downloads: | 4,072 |
Daily Downloads: | 8 |
Total Stars: | 579 |
Total Watchers: | 17 |
Total Forks: | 26 |
Total Open Issues: | 1 |
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.
addSubSelect($column, $query)
$column
must be a string.$query
must either be an instance of Illuminate\Database\Query\Builder
or Illuminate\Database\Eloquent\Builder
.orderBySub($query, $direction = 'asc', $nullPosition = null)
$query
must either be an instance of Illuminate\Database\Query\Builder
or Illuminate\Database\Eloquent\Builder
.$direction
must either be 'asc'
or 'desc'
.$nullPosition
must either be null
, 'first'
or 'last'
.orderBySubAsc($query, $nullPosition = null)
$query
must either be an instance of Illuminate\Database\Query\Builder
or Illuminate\Database\Eloquent\Builder
.$nullPosition
must either be null
, 'first'
or 'last'
.orderBySubDesc($query, $nullPosition = null)
$query
must either be an instance of Illuminate\Database\Query\Builder
or Illuminate\Database\Eloquent\Builder
.$nullPosition
must either be null
, '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();