Tengo una tabla de scans en mi base de datos, donde se registra la actividad de escaneo de un usuario y un usuario puede tener múltiples actividades en un día. Estoy buscando la mejor manera de obtener la suma de todos los escaneos de un usuario en particular durante un período de días.
Intenté lo siguiente en mi código, pero supongo que me falta algo, ya que me gustaría agregar los escaneos para un usuario que se realizó el mismo día.
DB::table('scans')->select(DB::raw('count(*) as total, scanner, created_at'))->where('scanner', 'Jon Snow')->groupBy('created_at')->get() => Illuminate\Support\Collection {#3313 all: [ {#3304 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:43:58", }, {#3321 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:32:40", }, {#3327 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-28 19:44:18", }, {#3323 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-28 20:30:30", },Así que en lugar de esto:
{#3304 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:32:58", }, {#3321 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:43:40", },yo tendria esto:
{#3304 +"total": 2, +"scanner": "Jon Snow", +"created_at": "2020-07-26", }, {#3304 +"total": 5, +"scanner": "Jon Snow", +"created_at": "2020-07-28", },Problema:
En este momento estás haciendo groupBy(created_at) . Dado que casi todos los escaneos tienen una fecha y hora diferente, groupBy no funcionará como se esperaba.
Soluciones:
Si entendí correctamente, desea el groupBy por fecha de created_at sin la hora. Para eso, tendrá que seleccionar solo la parte de la fecha de su columna de fecha y hora. Hay 2 formas de hacer esto:
DB::raw('count(*) as total, DATE_FORMAT(created_at, "%Y-%m-%d") as someDate, scanner') ->where('scanner', 'Jon Snow') ->groupBy('someDate') ->get()@editar
También podrías hacer DATE(created_at) as someDate
Ejemplo:
Tengo 4 Usuarios insertados en mi Base de Datos:
Resultado:
Illuminate\Support\Collection {#1945 #items: array:2 [ 0 => {#1952 +"count": 2 +"new_date": "2020-05-05" } 1 => {#2092 +"count": 2 +"new_date": "2020-10-10" } ] }