Laravel получает сумму в полиморфном много ко многим

#laravel

Вопрос:

Я хотел бы получить сумму столбца полиморфного отношения «многие ко многим». Итак, допустим, у вас есть пост и модель комментариев с такими отношениями, это не работает:

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

Ответ №1:

Начиная с laravel 8.x, у нас также есть метод withSum (), поэтому вы можете просто сделать:

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

И вы получите поле comments_sum_priority в каждом экземпляре модели Post.


Для более старых версий вы можете использовать необработанное выражение:

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

Просто для уточнения, ваш запрос не работает, потому что агрегат sum построителя запросов выполняет запрос.