Skip to main content

Configuration

  • Engine: MySQL 5.7
  • Charset: utf8mb4 (supports emoji/unicode)
  • Collation: utf8mb4_unicode_ci
  • Strict mode: Enabled
  • Connections: mysql (primary), mysql_test (test database)
Config: config/database.php

Core tables

Users & roles

The Tutor model applies a global scope filtering to role_id = 1.

Lessons & bookings

Payments

Teaching & availability

Verification

User details

Pivot tables

Migrations

~129 migration files in database/migrations/.

Important gotchas

Tutor addresses: Adding a new address deletes the existing one. Tutors are limited to 1 address. Students can have multiple.
Commission model: Only one commission can be active at a time. Commission::addNewModel() disables all existing commissions before inserting the new one.
PaymentReceipt boot method: Auto-calculates the commission breakdown on every model retrieval. This hits CommissionService on every PaymentReceipt::find(). Watch for N+1 performance issues on bulk queries.
profiles.tutoring_experience is stored in months, not years. The Profile::getTutoringExperience() method formats it as “X years Y months” for display.
files table uses non-incrementing UUID primary keys (string), not auto-increment integers.