如何在关系查询中使用 hasRole() in Laravel 5 过滤用户?
How do you filter the user with hasRole() in Laravel 5 within relational query?
我想过滤我的查询,并且 return 仅当用户具有角色 "Premium" 并将结果限制为 10。
与此查询一起的是 Conversion 拥有的记录计数,并按总列的 DESC 顺序对其进行排序。
现在我有一个工作查询,returns 转换计数和用户但没有用户过滤器角色。
// Model Conversion belongs to User
// $from & $end uses Carbon::createDate()
// Current code
$query = Conversion::select('user_id',DB::raw('COUNT(*) as total'))
->whereBetween('created_at', [$from,$end])
->where('type','code')
->where('action','generate')
->whereNotNull('parent_id')
->with('user')
->groupBy('user_id')
->orderBy('total', 'DESC')
->take(10)
->get();
// current result
foreach ($query as $q) {
$q->user->name; // To access user's name
$q->total; // To access total count
}
// I tried this but no luck
$query = Conversion::select('user_id',DB::raw('COUNT(*) as total'))
->whereBetween('created_at', [$from,$end])
->where('type','code')
->where('action','generate')
->whereNotNull('parent_id')
->with('user', function($q) {
$q->hasRole('Premium');
})
->groupBy('user_id')
->orderBy('total', 'DESC')
->take(10)
->get();
使用 whereHas()
而不是 with()
。此外,如果它不是本地范围,则不能使用 hasRole()
:
->whereHas('user.roles', function($q) {
$q->where('name', 'Premium');
})
您需要使用 whereHas
而不是 with
,像这样:
->whereHas('user', function ($query) {
$query->where('role','Premium');
})
我想过滤我的查询,并且 return 仅当用户具有角色 "Premium" 并将结果限制为 10。
与此查询一起的是 Conversion 拥有的记录计数,并按总列的 DESC 顺序对其进行排序。
现在我有一个工作查询,returns 转换计数和用户但没有用户过滤器角色。
// Model Conversion belongs to User
// $from & $end uses Carbon::createDate()
// Current code
$query = Conversion::select('user_id',DB::raw('COUNT(*) as total'))
->whereBetween('created_at', [$from,$end])
->where('type','code')
->where('action','generate')
->whereNotNull('parent_id')
->with('user')
->groupBy('user_id')
->orderBy('total', 'DESC')
->take(10)
->get();
// current result
foreach ($query as $q) {
$q->user->name; // To access user's name
$q->total; // To access total count
}
// I tried this but no luck
$query = Conversion::select('user_id',DB::raw('COUNT(*) as total'))
->whereBetween('created_at', [$from,$end])
->where('type','code')
->where('action','generate')
->whereNotNull('parent_id')
->with('user', function($q) {
$q->hasRole('Premium');
})
->groupBy('user_id')
->orderBy('total', 'DESC')
->take(10)
->get();
使用 whereHas()
而不是 with()
。此外,如果它不是本地范围,则不能使用 hasRole()
:
->whereHas('user.roles', function($q) {
$q->where('name', 'Premium');
})
您需要使用 whereHas
而不是 with
,像这样:
->whereHas('user', function ($query) {
$query->where('role','Premium');
})