2015-04-15 36 views
1

我在Laravel 5中實現雄辯有一個叫做groupBy的函數。我通常用它像這樣Laravel 5:如何檢索列中每種數據的10條記錄?

->groupBy('rating'); 

讓排名列說,有3種類型的整數評級:1,2 and 3我怎麼把它限制在10條記錄爲每一種等級的?最好使用雄辯,但如果這是不可能的,我仍然會接受查詢生成器方法。

+1

在查詢Eloquent模型時,查詢生成器上可用的所有方法也可用。 –

回答

3

Union應該工作:

$type1 = Model::whereType(1)->take(10); 
$type2 = Model::whereType(2)->take(10); 
$type3 = Model::whereType(3)->take(10); 

$types = $type1->union($type2)->union($type3)->get(); 
+1

呃,是不是像查詢四次?是否有可能在單個查詢中得到答案? – Mark

+2

這是一個單一的查詢:http://stackoverflow.com/q/24825245/1331425 –

+2

take()方法不會執行查詢,據我所知,它返回一個查詢生成器實例。只有get()調用(在最後一行)纔會執行查詢。 @limonte:你的鏈接與我們在這裏所做的完全不同。 Eloquent是一個ORM,執行的查詢的數量只取決於它的實現。 – Blackus

0

如果我沒有得到你的問題錯,你的問題MySQL的解決方案將是Get top n records for each group of grouped results

但是,當我們把我們的願望查詢laravel,所以它會看相同:

$Rating1 = Model::whereRating(1)->take(10); 
$Rating2 = Model::whereRating(2)->take(10); 
$Rating3 = Model::whereRating(3)->take(10); 
$result = Model::unionAll($Rating1)->unionAll($Rating2)->unionAll($Rating3)->get(); 

而且它也是一個查詢不是多個按照laravel 4.2 docs,如果你仍然混淆實施它,讓我知道。

相關問題