首页 > 解决方案 > Laravel在多态多对多中得到总和

问题描述

我想获得多态多对多关系的列的总和。因此,假设您有一个具有这种关系的 Post 和一个 Comment 模型,这是行不通的:

$posts = Post::withCount([
  'comments as comments_priority_sum' => function ($q) {
    $q->sum('comments.priority');
  },
  ])
  ->orderBy('title', 'asc')
  ->get();

标签: laravel

解决方案


从 laravel 8.x 开始,我们还有withSum()方法,所以你可以简单地这样做:

Post::withSum('comments', 'priority')->get();

您将在 Post 模型的每个实例中获得一个 comments_sum_priority 字段。


对于旧版本,您可以使用原始表达式:

Post::withCount(['comments as comments_sum_priority' => function($query) {     
    $query->select(DB::raw('sum(priority)')); 
}])->get()

只是为了澄清一下,您的查询不起作用,因为查询构建器的sum聚合执行查询。


推荐阅读