如何使用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);
我想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);