如何使用LaravelEloquent使用groupBy和havingRaw查询最小数量的相关模型

How to use Laravel Eloquent to query a minimum number of related models using groupBy and havingRaw

我想select一个user只有他们有10次以上的行程,其中trip必须有一个步行leg

Table结构

// users
(int) id

// trips
(int) id
(fk) user_id

// legs
(int) id
(fk) trip_id
(str) mode

型号

class User extends Model
{
    public function trips()
    {
        return $this->hasMany(Trip::class);
    }
}

class Trip extends Model
{
    public function legs()
    {
        return $this->hasMany(Leg::class);
    }
}

我可以 return 有步行腿的用户...

$user = User::where('id', '=', 1)
    ->whereHas('trips', function($query) {
        ->query('legs', function($query) {
            $query->whereHas('mode', '=', 'walking');
        });
    })
    ->first();

... 似乎 can 使用 groupBy()havingRaw('COUNT(*) > 10') ...

$query = User::whereHas('trips', function ($query) {
    $query
        ->whereHas('legs', function ($query) {
            $query->where('mode', '=', 'walking');
        })
        ->groupBy('id')
        ->havingRaw('COUNT(*) > 10');
});

...但这就是我卡住的地方。

非常感谢任何帮助,谢谢!

这样做

$user = User::where('id', 1)
    ->whereHas('trips', function($query) {
        $query->whereHas('legs', function ($query) {
            $query->where('mode', 'walking');
        });
    }, '>', 10)
    ->first();

whereHas 的工作方式与 has 的工作方式相同,只是条件闭包。

public function whereHas($relation, Closure $callback = null, $operator = '>=', $count = 1);