Как использовать Laravel Eloquent для запроса минимального количества связанных моделей с использованием groupBy и usingRaw

Я хочу выбрать 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');
});

… но это то, где я застрял.

Любая помощь высоко ценится, спасибо!

0

Решение

Сделай это

$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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]