Creating and Updating Models 
This guide covers various ways to create and update model records in AvelPress.
Creating Records 
Method 1: New Instance 
php
$user = new User;
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->status = 'active';
$user->save();Method 2: Mass Assignment 
php
$user = User::create([
    'name' => 'John Doe',
    'email' => 'john@example.com',
    'status' => 'active'
]);Method 3: First or Create 
Creates a record only if one doesn't already exist:
php
$user = User::firstOrCreate(
    ['email' => 'john@example.com'], // Search criteria
    ['name' => 'John Doe', 'status' => 'active'] // Additional data if creating
);Method 4: Update or Create 
Updates existing record or creates new one:
php
$user = User::updateOrCreate(
    ['email' => 'john@example.com'], // Search criteria  
    ['name' => 'John Smith', 'status' => 'active'] // Data to update/create
);Bulk Creation 
php
// Insert multiple records efficiently
User::insert([
    ['name' => 'John', 'email' => 'john@example.com', 'created_at' => now()],
    ['name' => 'Jane', 'email' => 'jane@example.com', 'created_at' => now()],
    ['name' => 'Bob', 'email' => 'bob@example.com', 'created_at' => now()]
]);
// Create multiple with model events and mass assignment
User::createMany([
    ['name' => 'John', 'email' => 'john@example.com'],
    ['name' => 'Jane', 'email' => 'jane@example.com'],
    ['name' => 'Bob', 'email' => 'bob@example.com']
]);Updating Records 
Update Single Model 
php
// Method 1: Find and update attributes
$user = User::find(1);
$user->name = 'Jane Doe';
$user->email = 'jane@example.com';
$user->save();
// Method 2: Mass update single model
$user = User::find(1);
$user->update(['name' => 'Jane Doe', 'status' => 'inactive']);
// Method 3: Update without retrieving
User::where('id', 1)->update(['name' => 'Jane Doe']);Update Multiple Records 
php
// Update all records matching criteria
User::where('status', 'pending')
    ->update(['status' => 'active']);
// Update with additional conditions
User::where('created_at', '<', '2024-01-01')
    ->where('status', 'inactive')
    ->update(['status' => 'archived']);Increment and Decrement 
php
$user = User::find(1);
// Increment by 1
$user->increment('points');
$user->increment('login_count');
// Increment by specific amount
$user->increment('points', 10);
$user->increment('balance', 50.00);
// Decrement
$user->decrement('points', 5);
// Increment/decrement multiple columns
$user->increment('points', 1, ['last_activity' => now()]);
// Without retrieving the model
User::where('id', 1)->increment('view_count');Touch Timestamps 
Update only the updated_at timestamp:
php
$user = User::find(1);
$user->touch(); // Updates updated_at to current time
// Touch multiple models
User::whereIn('id', [1, 2, 3])->touch();Conditional Updates 
Only Update If Changed 
php
$user = User::find(1);
// Check if attribute has changed
if ($user->isDirty('email')) {
    // Email was changed
    $user->save();
}
// Get original values
$original = $user->getOriginal();
$originalEmail = $user->getOriginal('email');
// Check what changed
$changed = $user->getChanges();Update with Conditions 
php
// Only update if current status is 'pending'
$updated = User::where('id', 1)
    ->where('status', 'pending')
    ->update(['status' => 'approved']);
if ($updated) {
    echo "User was updated";
} else {
    echo "User was not updated (may not exist or not pending)";
}Upserting (Insert or Update) 
php
// Upsert single record
User::upsert([
    ['email' => 'john@example.com', 'name' => 'John Doe', 'points' => 100]
], ['email'], ['name', 'points']);
// Upsert multiple records
User::upsert([
    ['email' => 'john@example.com', 'name' => 'John Doe', 'points' => 100],
    ['email' => 'jane@example.com', 'name' => 'Jane Smith', 'points' => 150],
], ['email'], ['name', 'points']);Model Events During Creation/Updates 
Models fire events during creation and updates:
php
class User extends Model
{
    protected static function boot()
    {
        parent::boot();
        // Before creating
        static::creating(function ($user) {
            $user->uuid = wp_generate_uuid4();
            $user->slug = sanitize_title($user->name);
        });
        // After creating
        static::created(function ($user) {
            // Send welcome email
            wp_mail($user->email, 'Welcome!', 'Welcome to our site!');
        });
        // Before updating
        static::updating(function ($user) {
            // Log the change
            error_log("User {$user->id} is being updated");
        });
        // After updating
        static::updated(function ($user) {
            // Clear cache
            wp_cache_delete("user_{$user->id}");
        });
        // Before saving (creating or updating)
        static::saving(function ($user) {
            // Normalize email
            $user->email = strtolower($user->email);
        });
        // After saving (creating or updating)
        static::saved(function ($user) {
            // Update search index
            // UpdateSearchIndex::dispatch($user);
        });
    }
}WordPress Integration 
Creating WordPress Users 
php
class User extends Model
{
    protected static function boot()
    {
        parent::boot();
        static::created(function ($user) {
            // Create corresponding WordPress user
            $wp_user_id = wp_create_user(
                $user->email,
                wp_generate_password(),
                $user->email
            );
            if (!is_wp_error($wp_user_id)) {
                $user->update(['wp_user_id' => $wp_user_id]);
                
                // Set additional user meta
                update_user_meta($wp_user_id, 'first_name', $user->name);
                update_user_meta($wp_user_id, 'display_name', $user->name);
            }
        });
    }
}Sync with WordPress Data 
php
class Post extends Model
{
    public function syncWithWordPress()
    {
        if ($this->wp_post_id) {
            $wp_post = get_post($this->wp_post_id);
            
            if ($wp_post) {
                $this->update([
                    'title' => $wp_post->post_title,
                    'content' => $wp_post->post_content,
                    'status' => $wp_post->post_status,
                    'published_at' => $wp_post->post_date,
                ]);
            }
        }
    }
    // Automatically sync when updating
    protected static function boot()
    {
        parent::boot();
        static::updated(function ($post) {
            if ($post->wp_post_id && $post->isDirty(['title', 'content', 'status'])) {
                // Update WordPress post
                wp_update_post([
                    'ID' => $post->wp_post_id,
                    'post_title' => $post->title,
                    'post_content' => $post->content,
                    'post_status' => $post->status,
                ]);
            }
        });
    }
}Validation Before Save 
php
class User extends Model
{
    protected static function boot()
    {
        parent::boot();
        static::saving(function ($user) {
            // Validate email
            if (!is_email($user->email)) {
                throw new \InvalidArgumentException('Invalid email format');
            }
            // Ensure unique email
            $exists = static::where('email', $user->email)
                ->where('id', '!=', $user->id)
                ->exists();
                
            if ($exists) {
                throw new \InvalidArgumentException('Email already exists');
            }
            // WordPress integration - check if email exists in WP users
            if (email_exists($user->email)) {
                throw new \InvalidArgumentException('Email already exists in WordPress');
            }
        });
    }
}Error Handling 
php
try {
    $user = User::create([
        'name' => 'John Doe',
        'email' => 'invalid-email', // This will trigger validation
    ]);
} catch (\InvalidArgumentException $e) {
    // Handle validation error
    wp_die('Validation error: ' . $e->getMessage());
} catch (\Exception $e) {
    // Handle other errors
    error_log('User creation failed: ' . $e->getMessage());
    wp_die('An error occurred while creating the user.');
}Performance Considerations 
Batch Operations 
php
// Instead of multiple individual creates
foreach ($users as $userData) {
    User::create($userData); // Multiple database calls
}
// Use batch insert for better performance
User::insert($users); // Single database call
// Or if you need model events
User::createMany($users); // Optimized batch creation with eventsUpdate Only Changed Attributes 
php
$user = User::find(1);
$user->name = 'New Name';
// Only saves if attributes actually changed
if ($user->isDirty()) {
    $user->save();
}
// Check specific attributes
if ($user->isDirty('email')) {
    // Email was changed
}Use Timestamps Wisely 
php
// Disable timestamps for bulk operations
User::withoutTimestamps(function () {
    User::insert($bulkData);
});
// Or disable for specific model
class LogEntry extends Model
{
    public $timestamps = false; // No created_at/updated_at overhead
}