Php 基于日期groupBy类型的查询计数-Laravel
我的目标是构建这些数据 753 它现在可以工作了,但是它做了很多查询来得到我需要的东西 我试过了 我现在有点困了Php 基于日期groupBy类型的查询计数-Laravel,php,laravel,laravel-5,laravel-7,Php,Laravel,Laravel 5,Laravel 7,我的目标是构建这些数据 753 它现在可以工作了,但是它做了很多查询来得到我需要的东西 我试过了 我现在有点困了 如何优化查询?您可以在PHP端进行分组: $logs = BabyLog->where('babyId',$baby->id)->get()->groupBy(function ($log) { return $log->updated_at->format('y-m-d'); }); foreach($logs as $date =&
如何优化查询?您可以在PHP端进行分组:
$logs = BabyLog->where('babyId',$baby->id)->get()->groupBy(function ($log) {
return $log->updated_at->format('y-m-d');
});
foreach($logs as $date => $logsOnThatDay) {
// here on you can probably use the code you already have but this below might be shorter
$graphData[$date] = $logsOnThatDay->reduce(function ($acc, $log) {
if (array_key_exists($log->type, $acc)) { $acc[$log->type]++; }
return $acc;
}, [
'pee' => 0,
'poop' => 0,
'feed' => 0,
'medicine' => 0,
'sleep' => 0,
]);
}
在不需要的时候,您仍然在循环中运行查询。将所有这些添加到第一个查询中,并将其从循环中删除。但是,如果我将其拉出,我将如何访问所有日期
$logDate
如果您想建议您的查询,我将立即尝试。让我试试。。结果:我在null上得到了对成员函数format()的调用
我有一个输入错误,意思是说更新了
不是我写的乱七八糟的东西也忘了添加更新到现在的提要
$logs = BabyLog::whereDate('updated_at', '=', date('Y-m-d H:i:s'))
->whereIn('type', ['feed', 'pee', 'poop','medicine','sleep'])
->selectRaw('type, count(type) as count')
->groupBy('type')
->get()
->keyBy('type');
$logs = BabyLog->where('babyId',$baby->id)->get()->groupBy(function ($log) {
return $log->updated_at->format('y-m-d');
});
foreach($logs as $date => $logsOnThatDay) {
// here on you can probably use the code you already have but this below might be shorter
$graphData[$date] = $logsOnThatDay->reduce(function ($acc, $log) {
if (array_key_exists($log->type, $acc)) { $acc[$log->type]++; }
return $acc;
}, [
'pee' => 0,
'poop' => 0,
'feed' => 0,
'medicine' => 0,
'sleep' => 0,
]);
}