Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Menghimpunkan Rekod Pangkalan Data mengikut Hari Menggunakan Laravel Eloquent?

Bagaimana untuk Menghimpunkan Rekod Pangkalan Data mengikut Hari Menggunakan Laravel Eloquent?

Patricia Arquette
Patricia Arquetteasal
2024-10-27 03:33:03649semak imbas

How to Group Database Records by Days Using Laravel Eloquent?

Menyiasat Rekod Pangkalan Data Dikumpulkan Mengikut Hari Menggunakan Laravel Eloquent

Apabila bekerja dengan pangkalan data, selalunya perlu mengagregatkan data mengikut selang waktu tertentu, seperti hari. Dalam kes Laravel Eloquent, kaedah groupBy() membenarkan kami melakukan pengumpulan sedemikian, tetapi lajur berasaskan masa seperti created_at mungkin menimbulkan cabaran apabila menggunakan kaedah ini.

Masalah: Pengumpulan mengikut hari mempertimbangkan saat

Isu ini timbul kerana lajur create_at biasanya termasuk jam, minit dan saat, menghasilkan cap masa yang berbeza untuk acara yang berlaku pada hari yang sama. Akibatnya, apabila mengumpulkan mengikut create_at, rekod untuk hari yang sama mungkin diasingkan kerana perbezaan masa.

Sebagai contoh, pertimbangkan sampel data berikut:

created_at page_id user_id
2023-10-11 01:02:03 3 1
2023-10-12 12:34:56 5 5
2023-10-13 15:47:12 5 2
2023-10-13 18:23:09 3 4

Jika kami mencuba untuk mengumpulkan data ini dengan create_at menggunakan perintah Eloquent:

<code class="php">$visitorTraffic = PageView::groupBy('created_at')->get();</code>

Kami akan mempunyai baris yang berasingan untuk setiap kali pelawat mengakses halaman pada hari tertentu, yang bukan hasil yang diingini.

Penyelesaian: Menggunakan Pertanyaan Mentah dan Tarikh Karbon

Untuk mengatasi isu ini, satu penyelesaian ialah menggunakan pertanyaan SQL mentah. Dalam MySQL, fungsi DATE() boleh digunakan untuk menukar cap masa kepada tarikh yang sepadan, membolehkan kami mengumpulkan mengikut hari tanpa mengambil kira komponen masa. Pertanyaan berikut boleh digunakan:

<code class="sql">DB::table('page_views')
->selectRaw('DATE(created_at) AS date, COUNT(*) AS views')
->groupBy('date')
->get();</code>

Sebagai alternatif, pendekatan yang lebih Laravel Eloquent-centric boleh digunakan menggunakan tarikh Carbon:

<code class="php">$visitorTraffic = PageView::where('created_at', '>=', Carbon::now()->subMonth())
->groupBy(DB::raw('DATE(created_at)'))
->orderBy('date', 'DESC')
->get([
    DB::raw('DATE(created_at) AS date'),
    DB::raw('COUNT(*) AS views')
]);</code>

Dengan menggunakan fungsi DATE() atau Carbon tarikh, kami boleh mengumpulkan rekod pangkalan data mengikut hari sambil memastikan rekod yang mewakili hari yang sama diagregatkan bersama.

Atas ialah kandungan terperinci Bagaimana untuk Menghimpunkan Rekod Pangkalan Data mengikut Hari Menggunakan Laravel Eloquent?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn