nullthoughts / laravel-latest-relation
Laravel 中查询最新 HasMany 关联的 Eloquent 宏
v1.0.0
2020-02-05 16:13 UTC
Requires (Dev)
- orchestra/testbench: ^4.0
This package is auto-updated.
Last update: 2024-08-30 01:32:10 UTC
README
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'); });