Rumah >pangkalan data >tutorial mysql >Bagaimanakah cara saya mengumpulkan hasil Laravel Eloquent mengikut hari apabila cap masa berbeza-beza?
Dalam Laravel, apabila membuat pertanyaan pangkalan data, anda mungkin menghadapi keperluan untuk mengumpulkan hasil mengikut hari dan bukannya cap waktu. Berikut ialah soalan dan jawapan terperinci untuk menangani senario khusus ini:
Saya mempunyai jadual bernama page_views, yang menyimpan rekod lawatan halaman berserta cap masa, alamat IP pengguna dan ID halaman . Walaupun menggunakan kaedah groupBy, pertanyaan tidak mengumpulkan data mengikut hari dengan betul disebabkan perbezaan dalam saat dalam cap masa.
Saya ingin mendapatkan hasil berdasarkan paparan setiap hari, yang sepatutnya menyerupai:
date views ==== ===== 10-11-2013 15 10-12 2013 45 ... ...
Bolehkah sesiapa memberikan pandangan atau penyelesaian?
Untuk mengumpulkan hasil secara berkesan mengikut hari, jawapan mencadangkan memanfaatkan fungsi DATE() MySQL, yang mengekstrak bahagian tarikh daripada DateTime value:
DB::table('page_views') ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views')) ->groupBy('date') ->get();
Walau bagaimanapun, pendekatan pertanyaan mentah ini menyimpang daripada sintaks pembina pertanyaan Eloquent. Untuk penyelesaian yang lebih berorientasikan Fasih, jawapannya membentangkan perkara berikut:
$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"') ));
Pertanyaan ini menggunakan tarikh Karbon pada permulaan klausa untuk perbandingan dan menggunakan ungkapan mentah DB yang sesuai dalam kaedah get untuk mendapatkan kedua-dua tarikh dan kiraan tontonan.
Atas ialah kandungan terperinci Bagaimanakah cara saya mengumpulkan hasil Laravel Eloquent mengikut hari apabila cap masa berbeza-beza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!