codingmatters/employee-management-package
Laravel artisan package for basic employee management. Provides command-line tools to create, list, update, and remove employee records, helping you scaffold simple HR workflows inside your Laravel app.
Installation
composer require codingmatters/employee-management-package
php artisan vendor:publish --provider="CodingMatters\EmployeeManagement\EmployeeManagementServiceProvider" --tag="config"
php artisan migrate
config/employee-management.php file is published and configured (e.g., default_locale, timezone).Basic Usage
use CodingMatters\EmployeeManagement\Models\Employee;
$employee = Employee::create([
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'department' => 'Engineering',
'salary' => 75000,
]);
$employees = Employee::all(); // Eloquent collection
$activeEmployees = Employee::where('status', 'active')->get();
Artisan Commands
php artisan employee:list
php artisan employee:report --department=Engineering
CRUD Operations
Employee::find($id)->update(...)).$engineers = Employee::byDepartment('Engineering')->get();
Validation
use CodingMatters\EmployeeManagement\Rules\ValidSalary;
$request->validate([
'salary' => ['required', 'numeric', new ValidSalary],
]);
Events & Listeners
EmployeeCreated):
// In EventServiceProvider
protected $listen = [
'CodingMatters\EmployeeManagement\Events\EmployeeCreated' => [
'App\Listeners\SendWelcomeEmail',
],
];
API Integration
php artisan make:resource EmployeeResource
// app/Http/Resources/EmployeeResource.php
public function toArray($request) {
return [
'id' => $this->id,
'name' => $this->fullName,
'email' => $this->email,
];
}
Scheduling Jobs
// app/Console/Kernel.php
$schedule->job(new \CodingMatters\EmployeeManagement\Jobs\ReviewSalaries)->monthly();
Database Seeding Use Laravel’s seeder to populate test data:
// database/seeders/EmployeesTableSeeder.php
public function run() {
\CodingMatters\EmployeeManagement\Models\Employee::factory()->count(10)->create();
}
Policy Integration Attach policies for authorization:
// app/Policies/EmployeePolicy.php
public function update(User $user, Employee $employee) {
return $user->isAdmin() || $user->id === $employee->manager_id;
}
Testing Use Laravel’s testing helpers:
$response = $this->post('/employees', [
'first_name' => 'Test',
'last_name' => 'User',
]);
$response->assertCreated();
Missing Config
php artisan vendor:publish) may lead to undefined settings (e.g., default_locale).config/employee-management.php.Model Not Found
Employee model isn’t autoloaded, manually import it:
use CodingMatters\EmployeeManagement\Models\Employee;
Employee model is registered in config/app.php under aliases.Migration Conflicts
// In Employee model
protected $table = 'custom_employees';
Artisan Command Errors
spatie/laravel-permission) aren’t installed.Soft Deletes
$employees = Employee::withTrashed()->get(); // Include soft-deleted records
Log Employee Actions Use Laravel’s logging to track changes:
\Log::info('Employee created', ['employee' => $employee->toArray()]);
DD() for Inspection Quickly inspect objects:
$employee = Employee::find(1);
dd($employee->toArray());
Package Debugging Enable debug mode in the config:
// config/employee-management.php
'debug' => env('EMPLOYEE_MANAGEMENT_DEBUG', false),
Custom Fields
Add extra attributes to the Employee model:
// app/Models/Employee.php
protected $casts = [
'is_manager' => 'boolean',
'hire_date' => 'date',
];
Observers Extend default behavior with observers:
// app/Observers/EmployeeObserver.php
public function saving(Employee $employee) {
$employee->email = strtolower($employee->email);
}
Register in AppServiceProvider:
Employee::observe(EmployeeObserver::class);
API Resources Override default serialization:
// app/Http/Resources/EmployeeResource.php
public function toArray($request) {
return [
'id' => $this->id,
'name' => "{$this->first_name} {$this->last_name}",
'department' => $this->department->name, // If relationship exists
];
}
Service Providers Bind custom implementations:
// app/Providers/AppServiceProvider.php
public function register() {
$this->app->bind(
\CodingMatters\EmployeeManagement\Contracts\SalaryCalculator::class,
\App\Services\CustomSalaryCalculator::class
);
}
Views & Blade Share employee data with views:
// In a controller
return view('employees.index', ['employees' => $employees]);
@foreach($employees as $employee)
<tr>
<td>{{ $employee->fullName }}</td>
<td>{{ $employee->department }}</td>
</tr>
@endforeach
How can I help you explore Laravel packages today?