Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

162
Vistas
Mostrar recuentos de publicaciones para cada día de la semana en laravel

Tengo una función en mi controlador con esto:

 $one_week_ago = Carbon::now()->subDays(6)->format('Ym-d'); $dates = Post::where('created_at', '>=', $one_week_ago) ->groupBy('date') ->orderBy('date', 'ASC') ->get(array( DB::raw('Date(created_at) as date'), DB::raw('COUNT(*) as "count"') )); return view ('analytics', array('dates' => $dates));

Y mi opinión es:

 @foreach ($dates as $date => $count) <p> {{ $date . '->' . $count }}</p> @endforeach

Estoy obteniendo la salida como:

 0 -> {"date":"2017-04-07","count":7} 1 -> {"date":"2017-04-08","count":2} 2 -> {"date":"2017-04-12","count":4} 3 -> {"date":"2017-04-13","count":1}

Problema: Las fechas en las que no hay publicaciones (es decir, postscount = 0) no se muestran. Ejemplo: 2017-04-09, 2017-04-10 y 2017-04-11 no se muestran.

Pero quiero la salida para esas fechas como cuenta: 0

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Un enfoque para abordar esto es crear una colección que contenga primero los valores predeterminados (las claves son las fechas que está viendo y los valores son 0). Esto le da una matriz que se ve así:

 [ '2017-04-07' => 0, '2017-04-08' => 0, '2017-04-09' => 0, '2017-04-10' => 0, '2017-04-11' => 0, '2017-04-12' => 0, '2017-04-13' => 0, ]

Luego tomamos las publicaciones que encontramos y llamamos a pluck ; esto nos permite especificar el valor que queremos ( count ) y la clave que nos gustaría usar ( date ). Esto no necesariamente tendrá todos los días que queremos, y se verá así:

 [ '2017-04-07' => 12, '2017-04-10' => 3, '2017-04-11' => 7, ]

Finalmente, fusionamos los dos en función de las claves, utilizando la primera colección como base. Esto significa que podemos mantener todos los valores predeterminados que configuramos (y lo que es más importante, las 7 fechas que configuramos) y simplemente sobrescribe los valores de días individuales con los resultados de la base de datos.


Aquí está el código final:

 // Build an array of the dates we want to show, oldest first $dates = collect(); foreach( range( -6, 0 ) AS $i ) { $date = Carbon::now()->addDays( $i )->format( 'Ymd' ); $dates->put( $date, 0); } // Get the post counts $posts = Post::where( 'created_at', '>=', $dates->keys()->first() ) ->groupBy( 'date' ) ->orderBy( 'date' ) ->get( [ DB::raw( 'DATE( created_at ) as date' ), DB::raw( 'COUNT( * ) as "count"' ) ] ) ->pluck( 'count', 'date' ); // Merge the two collections; any results in `$posts` will overwrite the zero-value in `$dates` $dates = $dates->merge( $posts ); return view( 'analytics', compact( 'dates' ) );

Su vista entonces debería ser simplemente

 @foreach ( $dates as $date => $count ) <p> {{ $date }} = {{ $count }}</p> @endforeach
about 4 years ago · Santiago Trujillo Denunciar

0

tu funcion

 for ($i=0; $i<=6; $i++) { $dates[] = Carbon::now()->subDays($i)->format('Ym-d'); } $data = Post::whereIn('created_at', $dates) ->groupBy('date') ->orderBy('date', 'ASC') ->get(array( DB::raw('Date(created_at) as date'), DB::raw('COUNT(*) as "count"') )) ->keyBy('date'); return view ('analytics', array('dates' => $dates, 'data' => $data));

y ver

 @foreach ($dates as $date) <p> {{ $date . '->' . isset($data[$date]) ? $data[$date] : 0; }}</p> @endforeach
about 4 years ago · Santiago Trujillo Denunciar

0

@foreach ($fechas como $fecha => $recuento)

{{ $fecha . '->' . $contar }}

@endforeach

La cosa "$fecha => $recuento" actúa como $clave => valor y no le devolverá el resultado en el formato deseado.

Dado que sus datos son un objeto JSON, puede mostrarlos como

 @foreach ($data as $row) <p> {{ $row['date'] . '->' . $row['count'] }}</p> @endforeach

o

 @foreach ($data as $row) <p> {{ $row->date . '->' . $row->count }}</p> @endforeach
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda