2016-06-21 94 views
0

雄辯模型我有以下的原始查詢:子查詢與laravel 5

select * 
from (select * from settings order by priority desc) x 
group by name 

我想用一個laravel 5查詢生成器來代替,但不能讓子查詢工作。有沒有辦法做到這一點,而不使用原始查詢?

表:

id - name - priority 
1 1  1 
2 1  2 
3 2  1 

在上述情況下,它會返回第2排和第3像我想

我嘗試此查詢:

$settings = \App\Setting::where('user_id', Auth::id())->orWhere('tool_id', $id)->groupBy('name')->orderBy('priority', 'desc')->get(); 

但是,這將返回行1和3.

+1

這是沒有意義的,只是使用子選擇。沒有理由按名稱進行分組,因爲您不會彙總任何其他字段 –

+0

@RichBenner我修改了我的文章以獲得更多清晰度 –

+0

嘗試使用查詢生成器而不是Eloquent就像在此答案中一樣http://stackoverflow.com/a/31864088/ 3018183 –

回答

1

你可以使用CTE表達式嗎? RANK()將工作: WITH CTE AS ( SELECT *, RANK() OVER(PARTITION BY name ORDER BY priority desc) AS RowRank FROM settings ) SELECT id, name, priority FROM CTE c WHERE c.RowRank = 1

+0

該查詢已正常工作。我只是想將它轉換成查詢生成器,但沒有運氣 –