【发布时间】:2021-09-29 20:58:11
【问题描述】:
我之前搜索了所有其他问题。我必须简单的 groupBy 选择并从列中获取总和。但是如何从中进行 1 个查询(没有合并)。可能吗?
$Todo = Todo::selectRaw('sum(estimated_time) as amount')->groupBy('user_name')->get();
$Todo = Todo::get()->groupBy('user_name');
【问题讨论】:
我之前搜索了所有其他问题。我必须简单的 groupBy 选择并从列中获取总和。但是如何从中进行 1 个查询(没有合并)。可能吗?
$Todo = Todo::selectRaw('sum(estimated_time) as amount')->groupBy('user_name')->get();
$Todo = Todo::get()->groupBy('user_name');
【问题讨论】:
我建议你避免在 Laravel 中使用任何原始 SQL 语句。
如果您的目标是获取每个用户的所有待办事项的估计持续时间总和,您可以使用eager loading。
例如,您可以先查询所有用户并立即加载待办事项。
$users = User::query()->with('todos')->get();
然后您可以检索所有待办事项的估计持续时间的总和。
foreach($users as $user) {
$user->totalEstimatedTodoTime = $user->todos->sum('estimated_time')
}
如果您经常使用用户的总估计待办时间。你甚至可以定义一个accessor
例如在您的用户模型中:
public function getTotalEstimatedTodoTimeAttribute() {
return $this->todos->sum('estimated_time');
}
然后你可以像这样检索值:
$user->totalEstimatedTodoTime
【讨论】:
在模型中编写此代码:
public function setXXXAttribute($value)
{
$this->XXX= Model::where('user_name' , $this->user_name)->sum('estimated_time');
}
public function getXXXAttribute($value)
{
return $this->XXX
}
【讨论】:
Todo::all() 后,在行中添加列XXX。值为:总和estimated_time