ошибка компоновщика запросов laravel (GROUP CONCAT) - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть набор пользовательских навыков, но мне нужно, чтобы получить только навыки в виде массива, я попробовал это

$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 голосов
/ 15 ноября 2018

Закрытие объединения должно быть первым и единственным аргументом после имени таблицы.

->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();
...