【问题标题】:Laravel GroupBy with Sum added to Object将总和添加到对象的 Laravel GroupBy
【发布时间】: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');

【问题讨论】:

标签: laravel eloquent


【解决方案1】:

我建议你避免在 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

【讨论】:

    【解决方案2】:

    在模型中编写此代码:

    public function setXXXAttribute($value)
    {
         $this->XXX= Model::where('user_name' , $this->user_name)->sum('estimated_time');
    }
    
    
    public function getXXXAttribute($value)
    {
         return $this->XXX
    }
    

    【讨论】:

    • 在哪个型号中?
    • 把这个写在模型Todo中;在使用查询Todo::all() 后,在行中添加列XXX。值为:总和estimated_time
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2021-11-19
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多