A Laravel package for managing profile information (addresses, emails, phone numbers, websites, and bank accounts) using polymorphic relationships.
- Polymorphic Design - Reusable profile tables for any model
- Trait-Based - Use only what you need (addresses, emails, phones, websites, bank accounts)
- Type-Safe - Query scopes for phone types and other filters
- Configurable - Customize models and polymorphic type names
- UUID Support - Unique identifiers for external integrations
- Soft Deletes - Maintain audit trail of changes
- PHP ^8.3 | ^8.4
- Laravel ^11.0 | ^12.0
composer require cleaniquecoders/profile
php artisan vendor:publish --tag=profile-migrations
php artisan migrate
php artisan profile:seedAdd the HasProfile trait to your model:
use CleaniqueCoders\Profile\Concerns\HasProfile;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasProfile;
}Create profile information:
use CleaniqueCoders\Profile\Models\PhoneType;
// Create address
$user->addresses()->create([
'primary' => '123 Main Street',
'city' => 'Kuala Lumpur',
'postcode' => '50088',
'country_id' => 1,
]);
// Create phone numbers
$user->phones()->create([
'phone_number' => '+60123456789',
'phone_type_id' => PhoneType::MOBILE,
'is_default' => true,
]);
// Create email
$user->emails()->create([
'email' => 'john@example.com',
'is_default' => true,
]);
// Create website
$user->websites()->create([
'url' => 'https://example.com',
'is_default' => true,
]);Query profile information:
// Get all addresses
$addresses = $user->addresses;
// Get mobile phones only
$mobilePhones = $user->phones()->mobile()->get();
// Get default email
$email = $user->emails()->where('is_default', true)->first();| Trait | Purpose |
|---|---|
HasProfile |
Includes Addressable, Emailable, Phoneable, Websiteable |
Addressable |
Manage physical addresses |
Emailable |
Manage email addresses |
Phoneable |
Manage phone numbers (with types: home, mobile, office, fax, other) |
Websiteable |
Manage website URLs |
Bankable |
Manage bank account information |
Use individual traits for specific needs:
use CleaniqueCoders\Profile\Concerns\Addressable;
use CleaniqueCoders\Profile\Concerns\Phoneable;
class Company extends Model
{
use Addressable, Phoneable;
}📚 Complete Documentation - Comprehensive guides and API reference
- Installation Guide
- Configuration
- Quick Start Examples
- Architecture Overview
- Usage Guides
- API Reference
- Best Practices
class Company extends Model
{
use HasProfile, Bankable;
}
// Headquarters address
$company->addresses()->create([...]);
// Contact information
$company->phones()->create(['phone_type_id' => PhoneType::OFFICE, ...]);
$company->emails()->create(['email' => 'info@company.com', ...]);
$company->websites()->create(['url' => 'https://company.com', ...]);
// Banking details
$company->banks()->create([...]);class Employee extends Model
{
use HasProfile, Bankable;
}
// Home address for shipping
$employee->addresses()->create([...]);
// Multiple contact numbers
$employee->phones()->create(['phone_type_id' => PhoneType::MOBILE, ...]);
$employee->phones()->create(['phone_type_id' => PhoneType::HOME, ...]);
// Payroll bank account
$employee->banks()->create([...]);class Customer extends Model
{
use HasProfile;
}
// Billing and shipping addresses
$customer->addresses()->create(['type' => 'billing', ...]);
$customer->addresses()->create(['type' => 'shipping', ...]);
// Multiple contact methods
$customer->emails()->create([...]);
$customer->phones()->mobile()->create([...]);composer testContributions are welcome! Please see our contribution guidelines for details.
This package is open-sourced software licensed under the MIT license.
