whereNotIn('id',DB::raw('SELECT `room_id` ...') должен выглядеть как whereNotIn('id', [1,2,3,4,5]) после выполнения подзапроса для валидного выполнения, а результат выполнения DB::raw(...) возвращает данные не в таком формате. Нужно выполнить его отдельно, результат преобразовать в корректный массив и его уже передать в основной запрос.
DB::raw('SELECT `room_id` FROM `orders` WHERE `hotel_id` = '.$request->hotel_id.' WHERE `date_from` < '.$to.' AND `date_to` > '.$from.'')