gpt4 book ai didi

php - 在 laravel 中显示一周中每一天的帖子计数

转载 作者:行者123 更新时间:2023-12-05 01:18:41 24 4
gpt4 key购买 nike

我的 Controller 中有一个函数:

$one_week_ago = Carbon::now()->subDays(6)->format('Y-m-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));

我的观点是:

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

我得到的输出是:

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}

问题:没有帖子的日期(即 postscount = 0)未显示。示例:2017-04-09、2017-04-10 和 2017-04-11 未显示。

但我希望这些日期的输出为 count:0

最佳答案

解决此问题的一种方法是首先构建一个包含默认值的集合(键是您正在查看的日期,值为 0)。这为您提供了一个如下所示的数组:

[
'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,
]

然后我们获取我们找到的帖子并调用 pluck - 这让我们指定我们想要的值 (count) 和我们想要使用的键 (日期)。这不一定包含我们想要的所有日期,并且看起来像这样:

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

最后,我们以第一个集合为基础,根据键合并两者。这意味着我们可以保留我们设置的所有默认值(更重要的是,我们设置的所有 7 个日期)并且它只是用数据库的结果覆盖个别日期值。


这是最终代码:

// 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( 'Y-m-d' );
$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' ) );

那么你的观点应该只是

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

关于php - 在 laravel 中显示一周中每一天的帖子计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43390715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com