So, each reservation has 1 database entry for a date range? If so, querying for a date range gets a bit tricky with this set up. Without getting complicated, simple query scopes could easily find themselves outside of the date range. For example, if you made a query for all reservations between Dec 15-20, a reservation with a Start Date of Dec 14 and an End Date of Dec 20 would not be included.
Someone else might have a better idea, but what I would consider is changing your Reservation model to be based upon a single day, and scrap the Start/End fields. Have your application logic handle creating multiple reservation entries for each day within the reservation range.
This way, you could get a collection of all days by doing something like this:
Room::where('id', $id)->with(['reservations' => function($query) {
$query->whereBetween('reservation_date', [$startDate, $endDate]);
}])->get();
Or...
Reservations::where('room_id', $id)
->whereBetween('reservation_date', [$startDate, $endDate])
->get();
Then within your blade, you could just iterate over all the reserved days within the date-range filtered collection.