4
我有这样的SQL查询与Laravel查询生成器Laravel SQL查询返回错误的结果
$this->candidate->select('candidates.*', 'candidates.id as candidate_id', 'mj.interviewScheduledDate')
->join('candidates_positions', 'candidates_positions.candidate_id', '=', 'candidates.id')
->leftJoin(DB::raw("(SELECT mat1.* FROM matches AS mat1
JOIN (SELECT candidate_id, MAX(id) AS id FROM matches GROUP BY candidate_id)
AS mat2 ON mat1.candidate_id = mat2.candidate_id AND mat1.id = mat2.id)
AS mj"), function ($join) {
$join->on("candidates.id", "=", "mj.candidate_id");
})
->where(function ($query) {
$query->where("mj.stage", "<", "4")
->whereNull('mj.stage', "or");
})
->groupBy('candidates.id')
->paginate(Config::get('match.pagination'));
这将返回错误的结果,其中来自同一查询生成器将生成的查询正确的结果。 $candidate->toSql()
返回以下查询。甚至试图通过声明去除群体。它并没有帮助
SELECT
`candidates`.*,
`candidates`.`id` AS `candidate_id`,
`mj`.`interviewScheduledDate`
FROM `candidates`
INNER JOIN `candidates_positions` ON `candidates_positions`.`candidate_id` = `candidates`.`id`
LEFT JOIN (SELECT mat1.*
FROM matches AS mat1
JOIN (SELECT
candidate_id,
MAX(id) AS id
FROM matches
GROUP BY candidate_id)
AS mat2 ON mat1.candidate_id = mat2.candidate_id AND mat1.id = mat2.id)
AS mj ON `candidates`.`id` = `mj`.`candidate_id`
WHERE (`mj`.`stage` < ? OR `mj`.`stage` IS NULL)
GROUP BY `candidates`.`id`
LIMIT 10 OFFSET 0