Our website uses cookies.
Some of the cookies used are essential for parts of the site to operate.
Plan Your Adventure
' + parts.join(' ') + '';return label;};var boldLast = function(parts) {var last = parts.pop();var label = parts.join(' ') + '
' + last + '';return label;};// update all main nav links with selective bold styling (top-level parents only)var styleNav = function() {header.find('nav.nav-main > ul > li > a').each(function(i,v) {var link = $(v);var label = link.text().trim();var parts = label.split(' ');if (parts.length > 1) {label = (label.toLowerCase() === 'things to do') ? boldFirst(parts) : boldLast(parts);}link.html(label);});header.find('nav.nav-main').addClass('loaded');// prepend a map icon to the map link// t559032 mapexplorer deprecation// header.find('nav.nav-secondary ul li[data-slug="mapexplorer"] a').prepend('');};styleNav();mobileToggle.on('click', function(e) {body.toggleClass('menu-open');menuOverlay.toggleClass('hidden');if (!body.hasClass('menu-open')) {menuItems.removeClass('open');}e.preventDefault();});mobileLabel.on('click', function(e) {mobileToggle.trigger('click');e.preventDefault();});menuOverlay.on('click', function(e) {mobileToggle.trigger('click');e.preventDefault();});$(window).on('resize', function() {if (window.innerWidth > 1024 && header.hasClass('open')) {mobileToggle.trigger('click');}});});
{{:link}}{{:link_text}}{{link_text}}{{?}}Learn More{{/}}{{/}}{{:isVideo()}}Play Video {{/}}
Traveling to Your Getaway
Looking to escape to Laughlin? Take an easy drive or catch a charter bus into the city to start your getaway. Learn about all your options for traveling to this desert oasis.Harrah's Laughlin and Don Laughlin's Riversideoffer air and room packages with several domestic flight routes across the U.S.Please contact the hoteldirectly regarding flight packages from your preferred city or airport.
Average Rate / Night
${{dollar}}{{cents}}*
';var linkTmpl = 'Book Direct';rates.populateSummary({node: detailroot, rateTmpl: rateTmpl, linkTmpl: linkTmpl, cleanup: false, ids: crmacctids, startdate: startdate, enddate: enddate });showRates();};/*** end: Rates ***/var masterFlow = new asyncLib.Flow();masterFlow.series({init: function(cb) {var vue = layoutjs.getVue({rootNode : $("#layoutjs_41c91d59-9ff8-47dd-a774-d4a02ec02397"),type : "listings",view : defaultView,defaultView : defaultView,limit : limit,sort : "qualityScore",// if there is a defaultImageUrl defined in client config, use it. Else it will utilize the default declared in custom_layoutjs.jsfallbackImageUrl : "https://assets.simpleviewcms.com/simpleview/image/upload/v1/clients/lasvegas/LVCVA_Laughlin_Final_PREVIEW-6560_73957191-8789-420a-a461-d898ead253ec.jpg",hasTripbuilder : site.siteConfig.plugins.tripbuilder.active,showFilter : widget.custom_showListingFilters == "true",showPaging : widget.custom_showListingPaging == "true",showBar : widget.custom_showFilterBar == "true",baseFilter : baseFilter,filters : [{name : "keyword",label : "Start New Search",type : "keyword",toFilter : function(value, filter, context) {filter.solrOptions = {keyword : value}return filter;}},{name : "subcats",label : "Categories",// since we implicitly filter on available subcats, we hide the checkboxes if there is one or less optionsshow : subcats.length > 1,type : "checkbox",typeExtra : {options : subcats,countArgs : {watchFilters : ["amenities", "regions"],unsupportedFilters : ["keyword"],field : "categories.subcatid",unwind : "categories",model : "plugins_listings_listings",sort : true}},toFilter : function(value, filter, context) {filter.$and.push({filter_tags : {$in : crmLib.getListingFilterTags({ items : this.custom_selectedSubcatItems })}});return filter;}},{name : "regions",label : "Regions",// we implicitly filter on regions if they have been selected in the widget, so no reason to display a region option with 1 choice// if no regions were selected, then a region option with 1 choice is valid and therefore we pass the whole arrayshow : regionsChosen ? regions.length > 1 : regions.length > 0,type : "checkbox",typeExtra : {options : regions,countArgs : {watchFilters : ["subcats", "amenities"],unsupportedFilters : ["keyword"],field : "regionid",model : "plugins_listings_listings",sort : true}},toFilter : function(value, filter, context) {filter.$and.push({regionid : { $in : value.map(function(val) { return Number(val) }) }});return filter;}},{name : "amenities",label : "Amenities",// we do not implicitly filter on amenities so if there is only one available option we still want to show the checkboxshow : amenities.length > 0,type : "checkbox",typeExtra : {options : amenities,countArgs : {watchFilters : ["subcats", "regions", "amenities"],unsupportedFilters : ["keyword"],field : "amenities_array.uniquename",unwind : "amenities_array",model : "plugins_listings_listings",sort : true}},toFilter : function(value, filter) {value.forEach(function(val) {filter["amenities." + val + ".value_raw"] = true;});return filter;}}],sortOptions : [{ value : "qualityScore", label : "All" },{ value : "distance", label : "Near Me" }],maxRangeMiles : 100,latitude : 36.1699,longitude : -115.1398,data : {custom_catid : (widget.listingcats !== undefined) ? Number(widget.listingcats) : undefined,custom_dtnids : []},// computed allows the passing of computed and method properties, in cases where they may need to be unique to the templatecomputed : {custom_selectedSubcatItems : function() {return this.filter_subcats_numberArray.map(function(val) { return { site : site.site, subcatid : val } });},custom_dtnFilterTagItems : function() {// if we have not chosen subcats in the widget, then we need to load via the category id// if we have chosen subcats then we utilize whatever the state of the if (this.custom_selectedSubcatItems.length > 0) {// if we have items selected in the UI, use themreturn this.custom_selectedSubcatItems;} else if (subcatsChosen) {// if we have items chosen in the widget, use thosereturn allFilterTagItems;} else {// otherwise fall back to the chosen catidreturn [{ site : site.site, catid : this.custom_catid }];}}},methods : {},watch : {docs: function() {// place logic in here that needs to happen after render of itemsthis.$nextTick(function() {if (hasDtn) {gamClient.renderAds();}// populate rate infoif (isHotel) {if (!clientMoment(bookingDates.startdate,'MM/DD/YYYY').isValid()) {bookingDates.startdate = clientMoment().format("L");}if (!clientMoment(bookingDates.enddate,'MM/DD/YYYY').isValid()) {bookingDates.enddate = clientMoment().add(6, 'days').format("L");}var rateIds = []addRateInfo(root,crmacctids,bookingDates.startdate,bookingDates.enddate);// addButtonInfo(root,ids,bookingDates.startdate,bookingDates.enddate);}// get the parent data for each idparentIds.forEach(function(element, index, array) {getParentInfo(element);});$("[data-sv-updateRates]").click(function(e) {var detailroot = $('.rates_calendar');e.preventDefault();var t = $(this);var c = t.closest('.ratesContainer');var recid = $(c).data('svrates-container');var calendar = $('[data-svrates-calendar="' + recid + '"]');rates.populateCalendar({node: detailroot, rateTmpl: rateTmpl, linkTmpl: linkTmpl, cleanup: false, ids:[recid], startdate: bookingDates.startdate, enddate: bookingDates.enddate});$.magnificPopup.open({items: {src: calendar},type: 'inline'});});});lazyload.lazy($(this.$el).find('.content .item '));}},query : function(cb) {var self = this;var filter = self.getFilter("query");var options = {limit : self.args.limit,skip : self.skip,count : true,castDocs : false,fields : {address1 : 1,altphone : 1,"amenities.general_hours" : 1, "amenities.golf_holes" : 1,"amenities.golf_par" : 1,"amenities.golf_rating" : 1,"amenities.golf_slope" : 1,"amenities.golf_yardage" : 1,"amenities.dining_mealsserved" : 1,"amenities.dining_price" : 1,"amenities.hotels_petsallowed" : 1,categories : 1,company : 1,url :1,city : 1,region : 1,crmtracking : 1,description : 1,dtn : 1,isDTN : 1,loc : 1,latitude : 1,longitude : 1,media : 1,parentid : 1,phone : 1,primary_category: 1,primary_image : 1,primary_image_url : 1,rankid : 1,rankorder : 1,rankname : 1,recid : 1,regionid : 1,state : 1,social: 1,title : 1,tollfree : 1,weburl: 1,zip : 1,meetingfacility : 1,acctid : 1},hooks : defaultHooks};if (self.sort === "qualityScore") {options.sort = { qualityScore : -1, sortcompany : 1 };} else if (self.sort === "distance") {filter.solrOptions = filter.solrOptions || {};filter.solrOptions.sort = "distance";filter.solrOptions.point = [self.georesult.latitude, self.georesult.longitude].join(",");filter.solrOptions.radius = self.args.maxRangeMiles.toString();}if (options.skip === 0) {// whenever the skip is 0, we reset the custom_dtnids back to scratchself.custom_dtnids = [];}var flow = new asyncLib.Flow();flow.series({dtn : function(cb) {if (hasDtn === false || options.skip > 0 || self.sort === "distance" || self.custom_catid === undefined) {return cb(null, []);}var dtnFilter = self.getFilter("query");dtnFilter.$and.push({filter_tags : {$in : crmLib.getListingFilterTags({ items : self.custom_dtnFilterTagItems, dtn : true })}});// using 0000 and 2359 for caching purposes, otherwise we could just use Date().toISOString()var today0000 = clientMoment().startOf("day"); // send date as 00:00:00 in the client timezone in UTCvar today2359 = clientMoment().endOf("day"); // send date as 23:59:59 in the client timezone in UTCdtnFilter.$and.push({$or : [{ "dtn.sdate" : { $lte : { $date : today0000.toISOString() } } },{ "dtn.sdate" : { $exists : false } }]},{$or : [{ "dtn.edate" : { $gte : { $date : today2359.toISOString() } } },{ "dtn.edate" : { $exists : false } }]});var dtnOptions = $.extend({}, options, {// we allow DTN to oversell the first page by a factor of 2// we will pull from this set a max of the limitlimit : self.limit * 2,count : false,hooks : defaultHooks.concat("afterFind_dtn")});if (xhr) { xhr.abort(); }xhr = $.get("/includes/rest_v2/plugins_listings_listings/find/", { json : JSON.stringify({ filter : dtnFilter, options : dtnOptions }), token : core.simpleToken });xhr.done(function(res) {// randomize the result set, then trim it down to our desired limitres.docs = arrayLib.randomize(res.docs);res.docs = res.docs.splice(0, dtnargs.limit);res.docs.forEach(function(val) {self.custom_dtnids.push(val.recid);val.dtnAuid = dtnargs.auid;val.isDTN = true;});return cb(null, res.docs);}).fail(function(err, type, message) {if (type === "abort") { return flow.halt({ total : 0, docs : [] }); } // another request has aborted this one, so halt this flowreturn cb(new Error(message));});},data : function(cb) {if (flow.data.dtn.length > 0) {// has DTN listings, need to adjust page 1 limit and store dtnids for exclusion from main query on all pagesoptions.limit -= self.custom_dtnids.length;} else {options.skip = (options.skip - self.custom_dtnids.length);}if (self.custom_dtnids.length > 0) {filter.recid = { $nin : self.custom_dtnids }}if (xhr) { xhr.abort(); }if (self.custom_dtnids.length === self.limit) {options.limit = 1;}defaultView = defaultView;xhr = $.get("/includes/rest_v2/plugins_listings_listings/find/", { json : JSON.stringify({ filter : filter, options : options }), token : core.simpleToken });xhr.done(function(res) {res.docs.docs.forEach(function(val) {crmacctids.push(val.acctid);// assign listing typesfor (let i = 0; i < val.categories.length; i++) {if (val.categories[i].catid === 293) { // restaurantsval.restaurant = true;// get cusinetypes for restaurantsval.cuisineTypes = [];for (var j = 0; j < val.categories.length; j++) {if (val.categories[j].catid == 293) {val.cuisineTypes.push(val.categories[j].subcatname);}}} else if (val.categories[i].catid == 292 || val.categories[i].catid == 296) { // accomodationsval.accomodation = true;} else if (val.categories[i].subcatid == 1368) { // golfval.golf = true;}}if (widget.listingcats == 302) {val.meetingSpace = true;if (val.recid !== undefined && parentIds.indexOf(val.recid) == -1) {parentIds.push(val.recid);}}if (val.parentid !== undefined && parentIds.indexOf(val.parentid) == -1) {parentIds.push(val.parentid);}});var returnData = {total : res.docs.count + self.custom_dtnids.length,docs : flow.data.dtn.concat(res.docs.docs).slice(0, self.limit)};returnData.docs = returnData.docs.map(function(val, index) {return {recid : val.recid,acctid : val.acctid,crmc : val.primary_category.catname,crmsc : val.primary_category.subcatname,category : val.primary_category.catname + ' | ' + val.primary_category.subcatname,itemName : val.title,itemType : 'listings',title : val.title,image_url : (val.primary_image_url === undefined) ? self.args.fallbackImageUrl : val.primary_image_url,url : val.url,city: val.city,region : val.region,rankname : val.rankname,index: (index + (options.skip || 0)) ?? undefined,zip: val.zip,phone: val.altphone,description: stringLib.stripHtml(val.description),location: val.location,restaurant: val.restaurant,cuisineTypes: val.cuisineTypes,amenities: val.amenities,meetingfacility : val.meetingfacility !== undefined ? {numrooms : val.meetingfacility.numrooms,banquet : val.meetingfacility.banquet,reception : val.meetingfacility.reception,sleepingrooms : val.meetingfacility.sleepingrooms,largestroom : val.meetingfacility.largestroom,totalsqft : val.meetingfacility.totalsqft,theatre : val.meetingfacility.theatre,classroom : val.meetingfacility.classroom} : undefined,parentid: val.parentid,isHotel: isHotel,primary_category: val.primary_category,ttd: ttd,meeting: meeting,golf: golf,dtn : val.isDTN ? {auid : dtnargs.auid,rank : val.dtn.rank} : undefined,locations: [{title : val.address1,city: val.city,state: val.state,zip: val.zip,phone: val.phone}], // sets listing locationlatitude : val.latitude,longitude : val.longitude,qualityScore : val.qualityScore,button : {title : "View Website",url : val.weburl} // call to action button}});returnData.itemType = 'listings';returnData.itemListName = 'Listings Layout List';// 450853 Randomized Hotel Listingsif (isHotel) {returnData.docs = arrayLib.randomize(returnData.docs);}addSEMTracking(res.docs.docs);return cb(null, returnData);}).fail(function(err, type, message) {if (type === "abort") { return flow.halt({ total : 0, docs : [] }); } // another request has aborted this one, so halt this flowreturn cb(new Error(message));});}}, flow.cbLast(cb));}});/* register available UI events */var watcher = new UIWatcher(vue, $, document);var uid = clientLib.uuid().toString();var widgetEvents = ["change-page", "view-change", "value-change", "sort-change", "toggle-show-more","scroll-into-view", "item-click", "phone-click", "title-click", "map-pin-click", "tripbuilder"];for (var i=0; iPlan Your Trip to Laughlin
Comfortable accommodations, exciting attractions, riveting entertainment and adventurous day trips are just a few reasons Laughlin is a great getaway.
Transportation to Laughlin
Slide to Explore
Laughlin Newsletter Sign-up
Our e-newsletter will keep you informed about all the exciting special events, entertainment and package deals in Laughlin.
Sign Up for Email Updates
If you’d like to learn more about responsible gaming, please consult the Nevada Council orcall 1-800-522-4700
Learn More
If you’d like to learn more about responsible gaming, please consult the Nevada Council orcall 1-800-522-4700
© 2024 Las Vegas Convention and
Visitors Authority
All rights reserved