Вы проверили сайт Laravel?
https://laravel.com/docs/5.7/queries#joins
На нем есть демонстрация, которую вы можете использовать для реорганизации своего кода.
Как следует ниже с сайта.
Оператор внутреннего объединения Joins
Построитель запросов также может использоваться для написания операторов соединения.Чтобы выполнить базовое «внутреннее соединение», вы можете использовать метод join в экземпляре построителя запросов.Первым аргументом, переданным методу объединения, является имя таблицы, к которой нужно присоединиться, а остальные аргументы определяют ограничения столбцов для объединения.Конечно, как вы можете видеть, вы можете объединить несколько таблиц в одном запросе:
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
Там вы можете найти больше информации, если она вам подходит.