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

时间:2017-05-23 10:11:39

标签: php laravel count eloquent having

我想仅在{10}次旅行时选择usertrip必须行走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();

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

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

......但这就是我被困住的地方。

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

1 个答案:

答案 0 :(得分:1)

这样做

<p id="pw"></p>
<button id="button-clicker">click</button>

$user = User::where('id', 1) ->whereHas('trips', function($query) { $query->whereHas('legs', function ($query) { $query->where('mode', 'walking'); }); }, '>', 10) ->first(); 就像whereHas一样,带有条件闭包。

has