2015-09-27 45 views
2

我在Laravel上運行此代碼。如果我收到它們,我將添加過濾器/排序,並在運行之前更改查詢,然後對結果進行分頁。Laravel 5;在不改變它的情況下使用已經過濾的數據計數

$aDatas = DB::table('datas'); 

if (!empty($aLocations)) { 
    foreach ($aLocations as $oLocation) { 
     $aDatas->orWhere('pc', '=', $oLocation->pc); 
    } 
} 

if (!empty($oFilters->note)) { 
    $aDatas->where('note', '>=', $oFilters->note); 
} 

if (!empty($oFilters->nb_comments)) { 
    $aDatas->where('nb_comments', '>=', $oFilters->nb_comments); 
} 

if (!empty($oOrder->type)) { 
    $aDatas->orderBy($oOrder->type, $oOrder->sort); 
} 

// echo $aDatas->where('note', '>=', 5)->count() ???? 

它工作正常。 但我想用這些結果來計算它的幾個部分。 最後一行顯示我試圖做的事,計算這些過濾結果中有多少行記錄> = 5。但是,這樣做實際上會過濾我的原始數據。

我想過把$ aDatas分配給另一個變量,然後依靠這個,但我會有很多計數,這似乎很髒。

有沒有一個甜美的方式來做到這一點?

+0

你能解釋一下嗎?爲什麼你需要每個過濾器的計數? – Mithredate

+0

我正在顯示過濾器(即過濾器),該過濾器有多少個結果。因此,如果我僅顯示超過3顆星的結果以及超過50條評論,我想向用戶展示這些結果中有多少顆有4顆星和5顆星。編輯:也許,我想也顯示有多少這些結果有超過100條評論。 –

回答

1

只需保存你的DATAS的更換與此的最後一行:

$datas =$aDatas->where('note', '>=', 5)->get(); 
echo $datas->count(); 

//use datas here for more action. 
+0

這不會真的改變$ aDatas結果嗎? –

+0

我認爲你的目標是讓所有的數據來計算和使用它。那麼如果你不想使用更多的查詢,你將需要第二個變量。 – mimo

+0

我想要數據使用它們,然後我想在這些數據中有多個計數。 所以結果將是一個頁面,其中過濾數據顯示爲一個整體,然後有統計數字顯示有多少這個或這個過濾器。但我不想更改在此過程中顯示的數據。 –

0

爲您所有的要求,你可能要做出一些查詢來解決,因爲一個單一的查詢將不能夠做到這一點(據我所知)

//this is to get your total of note greater than 5 
$query = DB::table('datas'); 
$query->where('note', '>=', 5); 
$data = $query->paginate(10); 

$count = $data->getTotal(); 

基礎,讓您的其他數據

如果您正在使用分頁工作,使用getTotal()代替

$query = DB::table('datas'); 
$query->select(
    DB::raw('COUNT(stars) AS count'), 
    DB::raw('starts'), 
); 
$query->where('notes', '>=', 5); 
$query->groupBy('stars'); 
$data = $query->get(); 
相關問題