laravel-tickets maintained by bhhaskin
Description
Ticketing utilities for Laravel applications.
Author
Last update
2025/11/04 08:23
(dev-main)
License
Downloads
25
Tags
laravel-tickets
bhhaskin/laravel-tickets provides a reusable ticketing system for Laravel 10/11 applications with optional Markdown rendering, polymorphic attachments, audit logging, and workspace scoping.
Installation
composer require bhhaskin/laravel-tickets:^0.1.0
Publish config and migrations if you need to customise them:
php artisan vendor:publish --tag=laravel-tickets-config
php artisan vendor:publish --tag=laravel-tickets-migrations
Run the package migrations:
php artisan migrate
Features
- SQLite-friendly migrations and Testbench-ready factories.
- Markdown rendering for ticket bodies and replies (via
Str::markdown). - Optional audit trail if
bhhaskin/laravel-auditis installed. - Polymorphic associations (
ticketables) to link any Eloquent model to a ticket. - Optional workspace integration when
bhhaskin/laravel-workspacesis present.
Ticket Model
use Bhhaskin\Tickets\Models\Ticket;
$ticket = Ticket::create([
'user_id' => $user->id,
'subject' => 'DNS outage',
'body' => "We cannot reach example.com from the LA office.",
'priority' => Ticket::PRIORITY_HIGH,
]);
// Attach arbitrary models
$ticket->attachModel($site);
// Optional: assign a workspace if available
if (class_exists(\Bhhaskin\LaravelWorkspaces\Support\WorkspaceConfig::class)) {
$ticket->assignWorkspace($workspace);
}
// Replies render markdown automatically
$ticket->replies()->create([
'user_id' => $user->id,
'body' => "Here is **more** context",
]);
Scopes
// Tickets for a specific user
$mine = Ticket::forUser($user)->latest()->get();
// Tickets for a workspace (works when laravel-workspaces is installed)
$workspaceTickets = Ticket::forWorkspace($workspace)->with(['owner','replies','associations.ticketable'])->paginate();
Optional Packages
- Install
bhhaskin/laravel-auditto automatically log ticket and reply lifecycle events. - Install
bhhaskin/laravel-workspacesto scope tickets by workspace (addsworkspace()relation and resource payload).
Both integrations are auto-detected—no additional configuration is required once the packages are installed.
Testing
composer test
The suite uses Orchestra Testbench with in-memory SQLite and includes stubs for optional integrations so tests pass without extra dependencies.