Для начала стоит определиться, какую задачу решить надо: Как еще можно написать запрос? Как его написать "более стандартным функционалом Laravel"? Или же как сделать его быстрее? Или же как сделать меньше запросов?
Исходя из этих ответов, нужно выстраивать по разному решение.
Если не нравится ->exec(), то можно завернуть в DB::raw.
Ваше "изначальное" решение можно переписать через lazy load
$mediaItems = $this->mediaItems;
$mediaItems->load('likes')
$result = 0;
$result += $this->likes->sum('like');
foreach ($mediaItems as $mediaItem) {
$result += $mediaItem->likes->sum('like');
}
return $result;
Это уже сделает запросов меньше.
После посмотреть на структуру БД, посмотреть на загрузку. Может быть есть смысл либо кэшей прикрутить, если она больше Read чем write. Либо может денормализацию сделать или вообще вынести в отдельную красивую таблицу данные под этот запрос и свести ваш запрос к
SELECT like
FROM reports_likes
WHERE type = 'App\\MediaItem'
AND place_id = 1;