gpt4 book ai didi

php - 使用 Laravel 按天查询数据和分组

转载 作者:可可西里 更新时间:2023-11-01 13:41:15 25 4
gpt4 key购买 nike

我经营一个存储图片的网站,用户得到一个热链接。

我想在上传图片数据的表中查询最近7天的记录,只提取created_at列,将数据编译成一个数组,类似制作博客的存档列表。

我希望结果显示如下:

[
'Sunday' => 5,
'Monday' => 45,
'Tuesday' => 452,
...
]

其中每个数字代表每天创建的记录数。只要我能输出这样的数组,我就可以轻松处理 Javascript 端。

有人有什么建议吗?

编辑

这是我到目前为止尝试过的代码:

<?php

class Admin
{
public function getCreatedAtAttribute($value)
{
$this->attributes['created_at'] = Carbon::createFromFormat('Y-m-d H:i:s', $value);
}
public static function uploadsGraph()
{
$date = \Carbon\Carbon::now();
$uploads = Upload::select('created_at')->where('created_at', '>=', \Carbon\Carbon::now()->subWeek())->get();

foreach($uploads as $date)
{
echo $date->created_at . '<br>';
}
}
}

编辑 2

这是我试过的另一个版本,但效果不佳。

class Admin
{
public static function uploadsGraph()
{
$date = \Carbon\Carbon::now();
$uploadsByDay = DB::table('uploads')
->select(DB::raw('
YEAR(created_at) year,
MONTH(created_at) month,
MONTHNAME(created_at) month_name
'))
->groupBy('year')
->groupBy('month')
->orderBy('year', 'desc')
->orderBy('month', 'desc')
->get();
dd($uploadsByDay);
}
}

最佳答案

我假设一周中每一天旁边的数字代表当天创建的记录数,您要查询的整个数据集仅包含过去 7 天的数据。

这里的想法是选择在同一天创建的项目数(完全忽略 created_at 列的时间戳部分),因此我们可以使用 DB::raw select() 调用中聚合在特定日期创建的所有条目,然后将该数据集限制为仅包含上周创建的条目。像这样的东西应该可以工作:

$data = Upload::select([
// This aggregates the data and makes available a 'count' attribute
DB::raw('count(id) as `count`'),
// This throws away the timestamp portion of the date
DB::raw('DATE(created_at) as day')
// Group these records according to that day
])->groupBy('day')
// And restrict these results to only those created in the last week
->where('created_at', '>=', Carbon\Carbon::now()->subWeeks(1))
->get()
;

$output = [];
foreach($data as $entry) {
$output[$entry->day] = $entry->count;
}

print_r($output);

另请注意,我假设这是一个“滚动”的一周,如果今天恰好是星期四,那么数据集中的第一个日期将是前一个星期四。它不会在最近的星期日 开始,如果您需要的话。如果是,您可以将 -where() 条件更改为如下所示:

...
->where('created_at', '>=', Carbon\Carbon::parse('last sunday'))
...

关于php - 使用 Laravel 按天查询数据和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29753027/

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