nullthoughts/laravel-latest-relation

Laravel 中查询最新 HasMany 关联的 Eloquent 宏

v1.0.0 2020-02-05 16:13 UTC

README

Total Downloads Latest Stable Version Travis CI Build Status: Master

Laravel 最新关联

Laravel 中查询最新 HasMany 关联的 Eloquent 宏。

有关问题和解决方案的更多信息:Laravel 中 HasMany 关联最新记录的动态作用域,第 1 部分:使用子查询解决问题 - nullthoughts.com

安装

通过 composer 安装: composer require nullthoughts/laravel-latest-relation

使用/示例

在 whereHas 闭包中使用 Builder 方法

最新

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

查询

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

动态作用域

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)

查询

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

动态作用域

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

latestRelation()

查询

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

动态作用域

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

最早

$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');
});