Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Total Downloads Latest Stable Version Travis CI Build Status: Master

Laravel Latest Relation

Eloquent macros for querying the latest HasMany relationship in Laravel.

More information on the problem and solutions: Dynamic scope on latest record in Laravel's HasMany relationships, Part 1: solving with Subqueries - nullthoughts.com

Installation

Install via composer: composer require nullthoughts/laravel-latest-relation

Usage / Examples

Use the Builder methods inside a whereHas closure:

Latest:

whereLatestRelation($relation, $column, $operator = null, $value = null)

Query

$users = User::whereLatestRelation('logins', 'device_type', '=', 'desktop');

Dynamic Scope

public function scopeUsingDevice($query, $device)
{
    return $query->whereLatestRelation('logins', 'device_type', $device);
}

public function scopeHavingCountry($query)
{
    return $query->whereLatestRelation('logins', 'country', '!=', 'null');
}

whereLatest($column, $value)

Query

$users = User::whereHas('logins', function ($query) {
    $query->whereLatest('device_type', 'desktop');
});

Dynamic Scope

public function scopeUsingDevice($query, $device)
{
    return $query->whereHas('logins', function ($query) use ($device) {
        $query->whereLatest('device_type', $device);
    });
}

latestRelation()

Query

$users = User::whereHas('logins', function ($query) {
    $query->latestRelation()->whereBetween(
        'created_at', [
            Carbon::now()->startOfDay(),
            Carbon::now()->endOfDay()
        ]);
});

Dynamic Scope

public function scopeHavingDeviceType($query)
{
    return $query->whereHas('logins', function ($query) {
        $query->latestRelation()->whereNotNull('device_type');
    });
}

Earliest:

$users = User::whereLatestRelation('logins', 'device_type', 'desktop');

$users = User::whereHas('logins', function ($query) {
    $query->whereEarliest('device_type', 'desktop');
});

$users = User::whereHas('logins', function ($query) {
    $query->earliestRelation()->whereNotNull('device_type');
});

About

Eloquent macros for querying latest HasMany relationship in Laravel

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages