如何优化我的Laravel代码?例如,根据任务的状态(已完成、待办、执行)计算特定项目中的任务数。
public function ShowTaskStatus(Project $project)
{
$tasks = $project->tasks()->get();
$totaltask = $tasks->count();
$totaltask_doing = $tasks->where('status', "TODo")->groupBy('status')
->map(function ($row) {
return $row->count();
});
$totaltask_todo = $tasks->where('status', "Doing")->groupBy('status')
->map(function ($row) {
return $row->count();
});
$totaltask_done = $tasks->where('status', "Done")->groupBy('status')
->map(function ($row) {
return $row->count();
});
return [$totaltask, $totaltask_doing, $totaltask_todo, $totaltask_done];
}发布于 2022-03-24 15:13:58
如果您只需要来自不同类型任务的计数,那么就不要使用get()检索它们。
使用queryBuilder count()方法而不是集合count()方法
public function ShowTaskStatus(Project $project)
{
$taskCount = $project->tasks()->count();
$taskToDoCount = $project->tasks()->where('status', "TODo")->count();
$taskDoingCount = $project->tasks()->where('status', "Doing")->count();
$taskDoneCount = $project->tasks()->where('status', "Done")->count();
return [$taskCount,$taskToDoCount, $taskDoingCount, $taskDoneCount];
}如果只有这些状态,也可以省略$taksCount变量。
public function ShowTaskStatus(Project $project)
{
$taskToDoCount = $project->tasks()->where('status', "TODo")->count();
$taskDoingCount = $project->tasks()->where('status', "Doing")->count();
$taskDoneCount = $project->tasks()->where('status', "Done")->count();
return [$taskToDoCount + $taskDoingCount + $taskDoneCount, $taskToDoCount, $taskDoingCount, $taskDoneCount];
}您将注意到在性能上与直接在DB中进行get、计数和计数有很大的不同。特别是当你有很多任务条目的时候。
发布于 2022-03-24 20:54:08
您可以在一个查询中完成此操作;
return $project->tasks()->toBase()
->selectRaw(count(*) as total)
->selectRaw(count(case when status='TODo' then 1 end) as todo)
->selectRaw(count(case when status='Doing' then 1 end) as doing)
->selectRaw(count(case when status='Done' then 1 end) as done)
->first()
->values();https://stackoverflow.com/questions/71604872
复制相似问题