我的控制器中有一个功能:
regression_results.conf_int(alpha=0.01)
我的观点是:
$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
问题: 没有帖子的日期(即postscount = 0)没有显示。 示例:2017-04-09,2017-04-10和2017-04-11未显示。
但我希望这些日期的输出为count:0
答案 0 :(得分:2)
解决此问题的一种方法是首先构建一个包含默认值的集合(键是您正在查看的日期,值为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
)和我们想要使用的密钥(date
)。这不一定包含我们想要的所有日子,并且看起来像这样:
[
'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
答案 1 :(得分:1)
你的功能
for ($i=0, $i<=6; $i++) {
$dates[] = Carbon::now()->subDays($i)->format('Y-m-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));
并查看
@foreach ($dates as $date)
<p> {{ $date . '->' . isset($data[$date]) ? $data[$date] : 0; }}</p>
@endforeach
答案 2 :(得分:0)
@foreach($ date as $ date =&gt; $ count)
{{$ date。 &#39; - &GT;&#39; 。 $ count}}
@endforeach
&#34; $ date =&gt; $计数&#34;事物充当$ key =&gt;值并且不会以期望的格式返回结果。
由于您的数据是JSON对象,因此您可以将其显示为
@foreach ($data as $row)
<p> {{ $row['date'] . '->' . $row['count'] }}</p>
@endforeach
或
@foreach ($data as $row)
<p> {{ $row->date . '->' . $row->count }}</p>
@endforeach