我有这个带有Laravel Query构建器的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()返回以下查询.甚至尝试删除group by语句.它没有帮助
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
解决方法
仔细检查如何绑定值.你可能会绑定与Laravel不同的值.
这个链接也很有用:Different results using same query with DB::raw and Eloquent