\DB::table('cars')
->join('garage', 'garage.id', '=', 'cars.garage')
->where('garage.name', 'main')
Выше решается часть гаража и машины, но вы никогда не указали, что псевдоним p.Если p - это другая таблица, вам нужно добавить еще один вызов к join()
и сделать следующее
\DB::table('cars')
->join('garage', 'garage.id', '=', 'cars.garage')
//<Other table join goes here for table aliased to p>
->where('garage.name', 'main')
->select(['p.id', 'p.name', 'p.price'])
->get();