使用laravel获取其他(自定义)分组依据并进行计数

时间:2019-01-11 09:16:52

标签: php mysql laravel laravel-5

我想从职位空缺表中获取职位空缺。

职位空缺

id | 位置

1 | Laravel开发

2 | php开发人员

3 | Laravel开发

4 | Laravel开发

5 | Laravel开发

我想使用一些where语句获取空缺,但结果应为count。

enter image description here

如您在上面的屏幕截图中所见,...我仅使用以下查询获取“排名”列和“计数”

$vacancies = Vacancy::where('tag_category_id', $TagCatId)
            ->select('position', DB::raw('count(*) as total'))
            ->groupBy('position')
            ->get();

如果我也希望在此结果中显示ID列怎么办?

2 个答案:

答案 0 :(得分:1)

  

您需要首先在mysql连接的strict中将database.php键设置为 false

 'strict' => false,   //change true to false ..

然后运行此命令清除配置

php artisan config:cache

然后运行此查询

Vacancy::where('tag_category_id', $TagCatId)
            ->select('id','position', DB::raw('count(*) as total'))
            ->groupBy('position')
            ->get();

详细了解严格模式see

如果您想以模式进行自定义,则可以see

  

如果您处理所有操作,则禁用它不会使您的网站不安全   在控制器中进行验证并遵循Laravel之类的最佳实践   已经开箱了。

答案 1 :(得分:0)

尝试使用GROUP_CONCAT:

$vacancies = Vacancy::where('tag_category_id', $TagCatId)
            ->select(DB::raw('GROUP_CONCAT(id) AS IDs','position', DB::raw('count(*) as total'))
            ->groupBy('position')
            ->get();

这将为您提供每个位置的ID的逗号分隔列表

我在用户表上运行了此命令,因此忽略列名,但您将获得以下格式的结果:

我的查询:

Users::select(DB::raw('GROUP_CONCAT(id) AS IDs'), DB::raw('count(*) as Total'), 'team_id')
->groupBy('team_id')
->get();

我的输出:

App\Users {#3297
         IDs: "9,69,70,72,73",
         Total: 5,
         team_id: 11,
       },