Skip to main content

Overview

The User model extends Laravel’s Authenticatable class and implements email verification and media management capabilities. It uses Spatie’s Permission package for role-based access control and Media Library for avatar management. Namespace: App\Models\User Extends: Illuminate\Foundation\Auth\User as Authenticatable Implements:
  • Illuminate\Contracts\Auth\MustVerifyEmail
  • Spatie\MediaLibrary\HasMedia
Traits:
  • HasFactory - Model factory support
  • HasRoles - Spatie Permission package for roles and permissions
  • Notifiable - Laravel notification support
  • InteractsWithMedia - Spatie Media Library integration

Properties

Fillable Attributes

name
string
required
The user’s full name
email
string
required
The user’s email address (used for authentication)
password
string
required
The user’s hashed password

Hidden Attributes

These attributes are automatically hidden from JSON serialization:
password
string
Hidden from serialization for security
remember_token
string
Hidden from serialization for security

Casts

email_verified_at
datetime
Automatically cast to Carbon datetime instance
password
hashed
Automatically hashed when set

Relationships

Type: hasMany Related Model: App\Models\Link Description: Returns all URL shortener links created by this user.
public function links()
{
    return $this->hasMany(Link::class);
}

Methods

initials()

Returns: string Description: Generates the user’s initials from their name by taking the first letter of each word.
public function initials(): string
{
    return Str::of($this->name)
        ->explode(' ')
        ->map(fn(string $name) => Str::of($name)->substr(0, 1))
        ->implode('');
}
Example:
$user = User::find(1);
echo $user->initials(); // "JD" for "John Doe"

registerMediaCollections()

Returns: void Description: Registers the ‘avatars’ media collection for user profile pictures. This collection is configured as single file, meaning only one avatar can be assigned at a time.
public function registerMediaCollections(): void
{
    $this->addMediaCollection('avatars')->singleFile();
}

registerMediaConversions()

Parameters:
  • $media - Spatie\MediaLibrary\MediaCollections\Models\Media|null
Returns: void Description: Defines image conversions for uploaded avatars. Creates a ‘preview’ conversion that fits the image to 300x300 pixels.
public function registerMediaConversions(?Media $media = null): void
{
    $this
        ->addMediaConversion('preview')
        ->fit(Fit::Contain, 300, 300)
        ->nonQueued();
}

Usage Examples

Creating a User

use App\Models\User;

$user = User::create([
    'name' => 'John Doe',
    'email' => '[email protected]',
    'password' => 'secret123',
]);

Assigning Roles and Permissions

// Assign a role
$user->assignRole('admin');

// Give permission
$user->givePermissionTo('edit posts');

// Check permissions
if ($user->hasPermissionTo('edit posts')) {
    // User can edit posts
}

// Check roles
if ($user->hasRole('admin')) {
    // User is an admin
}

Working with Avatars

// Add an avatar
$user->addMedia($request->file('avatar'))
    ->toMediaCollection('avatars');

// Get avatar URL
$avatarUrl = $user->getFirstMediaUrl('avatars');

// Get preview conversion
$previewUrl = $user->getFirstMediaUrl('avatars', 'preview');

// Check if user has avatar
if ($user->hasMedia('avatars')) {
    // Avatar exists
}

Getting User Initials

$user = User::find(1);
$initials = $user->initials();

// Use in views
<div class="avatar">{{ $user->initials() }}</div>
$user = User::find(1);
$links = $user->links;

// Count user's links
$linkCount = $user->links()->count();

Database Schema

The users table includes:
  • id - Primary key
  • name - User’s full name
  • email - Unique email address
  • email_verified_at - Timestamp of email verification
  • password - Hashed password
  • remember_token - Remember me token
  • created_at - Timestamp
  • updated_at - Timestamp
  • Link - URL shortener links created by users

Build docs developers (and LLMs) love