Installation
Require the package. The service provider and the Appointments facade alias are auto-discovered — no manual registration:
composer require roundly-consulting/appointments-for-laravelPublish-only migrations
The package never loads its migrations, so php artisan migrate alone creates nothing. Publish them into your app’s database/migrations first — once published they are yours, and they run in the order they were published: appointments, then participants, then the venue location columns:
php artisan vendor:publish --tag="appointments-migrations"
php artisan migrateProvider package tables
Appointments builds on six Roundly provider packages that Composer installs alongside it. Their migrations are publish-only as well, so publish the ones the bundled Appointment model relies on — approval requests, contacts and reviews, plus media-library’s media table, which the reviews rating summary reads:
php artisan vendor:publish --tag="approvals-migrations"
php artisan vendor:publish --tag="contacts-migrations"
php artisan vendor:publish --tag="reviews-migrations"
php artisan vendor:publish --tag="media-migrations"
php artisan migrateThese are not optional. Skip one and the first call that reads it fails with a missing-table QueryException — ics() and toIcs() read the contacts table for the ORGANIZER and ATTENDEE lines, an approval-gated booking writes approval_requests, and ratingSummary() reads reviews and media.
geolocation-for-laravel adds no table of its own — venue coordinates live on the appointments table.
Configuration (optional)
The config file is optional — every key has a working default. Publish it to swap models, rename tables, change the participant key type or the behaviour defaults:
php artisan vendor:publish --tag="appointments-config"appointments-config and appointments-migrations are the only publish tags. Status, role and frequency labels come from the enums-for-laravel Helpers trait, so there are no language files to publish.
Check the setup
The effective configuration is summarised in Laravel’s about command:
php artisan about --only=appointmentsNext steps
- Add the HasAppointments trait to every model that takes part in appointments — see Participants.
- Get to know the entry point — see The Appointments facade.
- Book your first appointment with the fluent builder — see Creating appointments.
- Decide whether double-booking protection should be on for every call — see Conflict detection.
Show your open-source love
This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.
More ways to support, including cryptoBy donating, you agree to our donation terms.
Want this built into your product?
We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.