2017-02-21 71 views
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 

正确的结果 enter image description here

Laravel返回的结果 enter image description here

回答