繁体   English   中英

你如何在 Laravel 5 中的关系查询中使用 hasRole() 过滤用户?

[英]How do you filter the user with hasRole() in Laravel 5 within relational query?

我想过滤我的查询并仅在用户具有角色“高级”并将结果限制为 10 时返回。

与此查询一起的是转换具有的记录计数,并按总列按 DESC 顺序对其进行排序。

现在我有一个工作查询,它​​返回转换计数和用户但没有用户过滤器角色。

// 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');
 })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM