Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

163
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda