Используйте подзапрос в laravel eloquent с group by - PullRequest
0 голосов
/ 04 октября 2018

Я хочу передать следующий sql-запрос laravel:

SELECT total.candidate_name, total.name, total.questions, COUNT(total.grade)
FROM 
(
    SELECT c.name as candidate_name, j.name, t.questions, g.grade 
    FROM candidates as c 
        INNER JOIN job_openings as j on c.fk_id_job_opening=j.id_job_opening 
        INNER JOIN interview_templates as t on  j.fk_id_template=t.id_template 
        INNER JOIN responses as r on r.fk_id_candidate=c.id_candidate 
        INNER JOIN grades as g on r.id_response=g.fk_id_response 
    WHERE g.fk_id_user='some_id'
) as total
GROUP BY total.candidate_name, total.name, total.questions;

some_id будет получено методом Auth::id(), до сих пор у меня есть подзапрос, который работает хорошо:

$subquery = Candidate::select('candidates.name AS c_name', 'j.name AS j_name', 't.questions AS questions', 'g.grade AS grade')
    ->join('job_openings AS j', 'candidates.fk_id_job_opening', '=', 'j.id_job_opening')
    ->join('interview_templates AS t', 'j.fk_id_template', '=', 't.id_template')
    ->join('responses AS r', 'r.fk_id_candidate', '=', 'candidates.id_candidate')
    ->join('grades AS g', 'r.id_response', '=', 'g.fk_id_response')
    ->where('g.fk_id_user',Auth::id())
    ->get();

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

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 04 октября 2018

Я думаю, вы можете попытаться использовать построитель запросов только в одном запросе:

 return DB::table('candidates AS c')
    ->select( DB::raw('c.name AS c_name,j.name AS j_name,t.questions AS questions, count(g.grade) as countGrade'))
    ->join('job_openings AS j', 'c.fk_id_job_opening', '=','j.id_job_opening')
    ->join('interview_templates AS t', 'j.fk_id_template', '=', 't.id_template')
    ->join('responses AS r', 'r.fk_id_candidate', '=', 'c.id_candidate')
    ->join('grades AS g', 'r.id_response', '=', 'g.fk_id_response')
    ->where('g.fk_id_user',Auth::id())
    ->groupBy('c_name', 'j_name', 'questions')
    ->get(); 

Вам необходим DB :: raw для count (g.grade)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...