I know this is an old thread, but in case anyone comes across this, as of 11.22 Eloquent now supports this use case elegantly with the chaperone() method, which hydrates the parent model without doing an extra query.
So I think the implementation for the above example would be:
$place = Place::with([
'hotels' => fn ($hotels) => $hotels->chaperone(),
])->get();