Я хочу выбрать 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);
Других решений пока нет …