Skip to Content
Housr PortalDatabase

Database

Shared Database Architecture

The Portal, API v1, and API v2 all connect to the same MySQL database. This means:

  • Models in the Portal read and write the same rows that the APIs use.
  • Schema changes must be coordinated across all three applications.
  • There is no separate “portal database” — it is one shared MySQL instance.

The database connection is configured in config/database.php using standard Laravel MySQL settings:

DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=housr DB_USERNAME=forge DB_PASSWORD=

The strict mode is set to false to maintain compatibility with the existing schema.

Key Tables

Users & Auth

TableModelNotes
usersUserAll platform users (students, agents, moderators, admins, B2B). Role in role column.
internal_usersInternalUserHousr staff accounts for admin panel access
internal_rolesRoleStaff role definitions
internal_permissionsPermissionGranular permission definitions
internal_role_userPivot: internal users to roles
internal_permission_rolePivot: roles to permissions
password_reset_linksPassword_reset_linkPassword reset tokens
user_sessionsUserSessionLogin session tracking
bypass_codesBypassCodeAuth bypass codes

Properties

TableModelNotes
housesHouseProperty listings (soft deletes)
property_operatorsProperty_operatorCompanies managing properties (soft deletes, parent-child hierarchy)
property_operator_verificationsPropertyOperatorVerificationOperator verification status
house_image_roomsHouse_image_roomRoom images for houses
future_house_availabilitiesFuture_house_availabilityFuture availability dates
featured_housesFeatured_houseFeatured/promoted houses
house_changesHouse_changeAudit trail for house edits
house_viewedHouse_viewedView tracking
building_detailsBuildingDetailAdditional building information

Enquiries & Viewings

TableModelNotes
viewing_requestsViewing_requestStudent viewing requests
viewing_request_status_changesViewing_request_status_changeStatus audit trail
booking_slotsBooking_slotAvailable viewing times
booked_slotsBooked_slotConfirmed viewing bookings
enquiriesEnquiryDeprecated — legacy enquiry records
enquiry_status_changesEnquiry_status_changeLegacy enquiry status trail
website_enquiriesWebsite_enquiryEnquiries from the website
concierge_direct_transfersConcierge_direct_transferDirect concierge transfers

Communication

TableModelNotes
chat_roomsChat_roomChat conversations
chat_room_membersChat_room_memberChat participants
chat_room_moderationsChat_room_moderationModerator assignments
messagesMessageChat messages (synced with Firebase)

Contracts

TableModelNotes
contractsContractTenancy agreements
contract_membersContract_memberTenants on a contract
huddle_contractsHuddle_contractHuddle integration contracts
documentsDocumentContract and other documents

Events

TableModelNotes
eventsEventEvents with status, access_type, schedule
event_ticketsEventTicketIssued tickets
event_rsvpsEventRSVPRSVP responses
event_user_applicationsEventUserApplicationApplication-based access requests
event_exclusive_usersEventExclusiveUserUsers with exclusive access

Perks & Freebies

TableModelNotes
perksPerkStudent perks/discounts
perk_codesPerkCodeRedeemable codes
perk_partnersPerkPartnerPartner companies
freebiesFreebieFree item offers
freebie_redemptionsFreebieRedemptionRedemption records

Bills & Payments

TableModelNotes
bill_housesBillHouseHouses enrolled in bills
bill_regionsBillRegionRegional bill config
bill_tenantsBillTenantTenant bill assignments
bills_requestsBills_requestBill service requests
boost_creditsBoost_creditActive boost credits
boost_credit_pricesBoost_credit_pricePricing tiers
boost_transactionsBoost_transactionPurchase records
commissionsCommissionB2B commissions

Moderation & Ratings

TableModelNotes
moderation_notesModeration_noteModeration notes
moderation_ratingsModeration_ratingModeration quality ratings
ratings_studentsRatings_studentStudent ratings
ratings_landlordsRatings_landlordLandlord ratings
ratings_disputesRatings_disputeRating disputes
ratings_periodsRatings_periodRating period definitions

Configuration & System

TableModelNotes
citiesCitySupported cities
universitiesUniversityUniversities
environmentsEnvironmentDeployment environments
feature_flagsFeature_flagRuntime feature toggles
global_variablesGlobal_variableSystem-wide config values
search_areasSearchAreaSearch area boundaries
geofencesGeofenceGeographic boundaries

Notifications

TableModelNotes
notificationsNotificationPush notification definitions
notification_logsNotification_logSend logs
notification_opensNotification_open / NotificationOpenOpen/engagement tracking
dropsDropNotification drops
drop_opensDrop_openDrop engagement
portal_notificationsPortal_notificationIn-portal notifications

Data Integrity Notes

  • The Portal does not own the database schema — migrations exist but the canonical schema is shared with the API repos.
  • Many models use $guarded = [] (mass assignment unprotected) for flexibility.
  • Some models explicitly set public $timestamps = false when the table lacks created_at/updated_at columns.
  • Soft deletes are used on House and Property_operator models.
  • The CompanyScope trait on User allows scoping queries by company_name for multi-tenant operator views.
Last updated on