Вот необработанный запрос MySQL, который должен работать. Чтобы преобразовать это в Laravel, не должно быть слишком много работы, хотя вам, возможно, придется использовать DB::raw
один или два раза.
SELECT
s.ID AS setId,
s.`SET` AS name,
COALESCE(SUM(ii.have), 0) AS haveTotal
FROM sets s
LEFT JOIN indexed_items ii
ON s.ID = ii.setId
GROUP BY
s.ID;
Демо
Если вы не хотите возвращать наборы, не имеющие записей в таблице indexed_items
, вы можете удалить вызов к COALESCE
, а также использовать внутреннее соединение вместо левого.
Обратите внимание, что использование SET
для именования ваших таблиц и столбцов не очень хорошая идея, поскольку это ключевое слово MySQL.