Laravel에서 데이터베이스를 쿼리할 때 타임스탬프 대신 날짜별로 결과를 그룹화해야 할 수도 있습니다. 다음은 이 특정 시나리오를 해결하기 위한 자세한 질문과 답변입니다.
타임스탬프, 사용자 IP 주소 및 페이지 ID와 함께 페이지 방문 기록을 저장하는 page_views라는 테이블이 있습니다. . groupBy 메서드를 사용함에도 불구하고 쿼리는 타임스탬프 내의 초 차이로 인해 데이터를 일별로 올바르게 그룹화하지 않습니다.
일별 조회수를 기준으로 결과를 가져오고 싶습니다. 다음과 유사해야 합니다.
date views ==== ===== 10-11-2013 15 10-12 2013 45 ... ...
통찰력이나 솔루션을 제공할 수 있는 사람이 있습니까?
결과를 일별로 효과적으로 그룹화하려면 MySQL의 DATE() 기능을 활용하는 것이 좋습니다. DateTime 값에서 날짜 부분을 추출합니다.
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 원시 표현식을 적용하여 날짜와 조회수를 모두 검색합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3