繁体   English   中英

如何使用Laravel Eloquent通过groupBy和hadingRaw查询最少数量的相关模型

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

我只想选择一个user如果他们有10个以上的行程,且trip必须有步行leg

表结构

// 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);
    }
}

我可以返回一个有步行腿旅行的用户...

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

......它似乎是它可以 使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM