2015-03-31 94 views
0

我想改寫這個SQL來laravel 4查詢生成器與MAX()

SELECT 
    * 
FROM 
    SolutionFile 
WHERE 
    SolutionFile.group_id = $group_id and 
    version = (
     SELECT 
      max(s1.version) 
     FROM 
      SolutionFile s1 
     WHERE 
      s1.group_id = $group_id 
    ) 

我寫了這個請求

SolutionFile::where('group_id', '=', $group_id) 
    ->whereRaw('version = (select max(`version`) from files where group_id = ' . $group_id . ')')->get(); 

這完美的作品,但我想重寫它「laravel方式「沒有whereRaw。 我試過這個請求

SolutionFile::where('group_id', '=', $group_id) 
    ->where(function($query) use($group_id) { 
      return $query->where('version', '=', function() use($group_id) { 
       return SolutionFile::where('group_id', '=', $group_id)->max('version'); 
      }); 
     }); 

但它返回一個空集。

有什麼方法可以重寫嗎?我上次請求在哪裏出錯?

回答

0

我找到簡單的解決方案爲這個

SolutionFile::where('group_id', '=', $group_id) 
         ->where(function($query) use($group_id) { 
          return $query->where('version', '=', SolutionFile::where('group_id', '=', $group_id)->max('version')); 
         })->get() 

沒有必要使用function()作爲第三PARAM,從這個功能只能導致。