laravel查询生成器(GROUP CONCAT)错误

时间:2018-11-15 12:24:23

标签: mysql laravel laravel-query-builder

我收集了一些用户技能,但我需要的只是获得一些我尝试过的技能

$builder->where('job_id', $value)
->join('users', 'job_applicants.user_id', '=', 'users.id')
->join('user_skills', 'users.id', '=', 'user_skills.user_id', function ($join){
    $join->selectRaw("GROUP_CONCAT(user_skills.skill, ', ')");
})
->groupBy('job_applicants.job_id')
->get();

异常消息:Object of class Closure could not be converted to string

1 个答案:

答案 0 :(得分:2)

联接闭包应该是表名之后的第一个也是唯一的参数。

->join('user_skills', function ($join) {
    $join->on('users.id', '=', 'user_skills.user_id')
         ->selectRaw("GROUP_CONCAT(user_skills.skill, ', ')");
});

但是,联接闭包内部的selectRaw并没有多大意义。从逻辑上讲,这不是您选择数据的地方。您已经加入了表,您的select语句属于主查询,不属于包含在联接中,如下所示:

$builder->selectRaw("job_applicants.*, GROUP_CONCAT(user_skills.skill, ', ')")
    ->where('job_id', $value)
    ->join('users', 'job_applicants.user_id', '=', 'users.id')
    ->join('user_skills', 'users.id', '=', 'user_skills.user_id')
    ->groupBy('job_applicants.job_id')
    ->get();