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

标签 php mysql laravel eloquent relational

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

与此查询一起的是 Conversion 拥有的记录计数,并按总列按 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,如下所示:

 ->whereHas('user', function ($query) {
       $query->where('role','Premium');
 })

关于php - 如何在 Laravel 5 的关系查询中使用 hasRole() 过滤用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48821604/

相关文章:

php - mysql_num_rows 期望参数 1 是资源

php - 我的网页游戏的生命恢复

php - 替换 WordPress 管理员中的 user-edit.php 页面

php - 使用两个不同表的输入从一个表中获取值

mysql - Laravel lockForUpdate + 事务

php - 如何从另一个支持的页面表单调用该值并将其用于 OctoberCms 中的组件

php - Laravel 和 Paypal

php - PHP Elasticsearch “Set”映射

java - SQL 选择未提交导致缓存

mysql - 使文本列不为空的正确方法是什么