Skip to content

cleaniquecoders/profile

Profile

A Laravel package for managing profile information (addresses, emails, phone numbers, websites, and bank accounts) using polymorphic relationships.

Latest Stable Version Total Downloads Scrutinizer Code Quality License

Features

  • 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

Requirements

  • PHP ^8.3 | ^8.4
  • Laravel ^11.0 | ^12.0

Quick Start

Installation

composer require cleaniquecoders/profile
php artisan vendor:publish --tag=profile-migrations
php artisan migrate
php artisan profile:seed

Basic Usage

Add 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();

Available Traits

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;
}

Documentation

📚 Complete Documentation - Comprehensive guides and API reference

Quick Links

Use Cases

Corporate Profiles

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([...]);

Employee Management

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([...]);

Customer Records

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([...]);

Testing

composer test

Contributing

Contributions are welcome! Please see our contribution guidelines for details.

License

This package is open-sourced software licensed under the MIT license.

About

Basic Profile Information using Polymorph

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages