在Laravel 中,查詢資料庫時,您可能會遇到需要按天而不是時間戳將結果分組的情況。以下是針對此特定場景的詳細問題和解答:
我有一個名為page_views 的表,其中存儲頁面訪問記錄以及時間戳、用戶IP 地址和頁面ID 。儘管使用了 groupBy 方法,但由於時間戳記內的秒數差異,查詢無法正確地按天對資料進行分組。
我希望根據每天的視圖獲取結果,這應該類似於:
date views ==== ===== 10-11-2013 15 10-12 2013 45 ... ...
任何人都可以提供見解或解決方案嗎?
為了有效地按天對結果進行分組,答案建議利用MySQL 的DATE() 函數,該函數從DateTime 中提取日期部分value:
DB::table('page_views') ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views')) ->groupBy('date') ->get();
但是,這個原始查詢方法偏離了Eloquent 的查詢建構器語法。對於更面向Eloquent 的解決方案,答案如下:
$visitorTraffic = PageView::where('created_at', '>=', \Carbon\Carbon::now->subMonth()) ->groupBy('date') ->orderBy('date', 'DESC') ->get(array( DB::raw('Date(created_at) as date'), DB::raw('COUNT(*) as "views"') ));
此查詢利用初始where 子句中的Carbon 日期進行比較,並在get 方法中應用適當的DB 原始表達式來檢索日期和觀看次數。
以上是當時間戳記變化時,如何按天將 Laravel Eloquent 結果分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!