Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

164
Views
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

over 4 years ago · Santiago Trujillo
3 answers
Answer question

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
over 4 years ago · Santiago Trujillo Report

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
over 4 years ago · Santiago Trujillo Report

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
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!