tomatophp/tomato-tasks
Tomato Tasks is a Laravel package for TomatoPHP that adds task and project management to your admin panel, with assignments, priorities, statuses, due dates, and team collaboration, plus a ready-made UI and simple configuration for tracking work in one place.
composer require tomatophp/tomato-tasks:^1.0.2.php artisan vendor:publish --tag=tomato-tasks-config
php artisan vendor:publish --tag=tomato-tasks-migrations
php artisan migrate
Check the package README for the exact publish tags and whether config publishing is optional.config/tomato-tasks.php for model, table, middleware, and UI options.src/Models/Task.php for fillable fields, relationships, casts, and scopes.use TomatoPHP\TomatoTasks\Models\Task;
$task = Task::create([
'name' => 'Follow up with lead',
'description' => 'Call before end of day',
'user_id' => auth()->id(),
// Set status/priority only if those fields exist in your published migration.
]);
Task::create([
'name' => "Review order #{$order->id}",
'user_id' => $order->assigned_user_id,
'due_at' => now()->addDay(),
]);
Confirm field names against the published migration before relying on them.Task model directly and wrap it in your own controller/resource. Avoid coupling business logic to Filament resource classes.models.task key, point it at your own subclass to add scopes, relationships, or audit behavior without forking:
// config/tomato-tasks.php
'models' => [
'task' => App\Models\Task::class,
],
TaskPolicy and register it. Filament resources are often visible to any panel user by default; enforce ownership/team access explicitly.Schedule::call(function () {
Task::where('due_at', '<', now())
->whereNull('completed_at')
->update(['is_overdue' => true]);
})->daily();
Adjust column names to match your schema.RefreshDatabase and create tasks through the model or factory. Test empty assignees/relations because v1.0.2 specifically addresses array-key and property-access failures.composer update tomatophp/tomato-tasks and then php artisan optimize:clear.0 in config arrays or null relation access, keep tests around those paths. The fix likely covers empty arrays/missing relations, but custom config overrides may still produce shapes the package does not expect.[], verify the UI and programmatic creation still work. Keep at least one default value where the package expects one, or guard your own code with array_key_first() / reset().$task->user->name when user_id is null. Use $task->user?->name and make assignee columns nullable where appropriate.php artisan migrate. If the table already exists, do not republish over it; create a new migration for schema changes.composer.json constraints against your Filament major version. A mismatch can surface as missing plugin classes or resource errors rather than an obvious dependency failure.storage/logs/laravel.log and clear cached config/routes after changing published config.How can I help you explore Laravel packages today?