From Laravel toolkit
Laravel database optimization patterns. Use when writing Eloquent queries, creating migrations, configuring caching, debugging slow queries, or optimizing database performance. Triggers on tasks involving N+1 queries, indexing, Redis caching, pagination, or database transactions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/laravel:laravel-database-optimizationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Comprehensive database optimization guide for Laravel 13 applications. Contains 33 rules across 9 categories for writing performant database queries, proper indexing, efficient caching, naming conventions, and debugging slow queries in Laravel 13.
AGENTS.mdREADME.mdrules/_sections.mdrules/_template.mdrules/cache-invalidation.mdrules/cache-remember.mdrules/cache-tags.mdrules/cache-ttl.mdrules/data-avoid-unbounded.mdrules/data-chunk-by-id.mdrules/data-cursor-iteration.mdrules/data-cursor-pagination.mdrules/debug-explain-analyze.mdrules/debug-laravel-debugbar.mdrules/debug-slow-query-log.mdrules/eloquent-query-builder-hot-paths.mdrules/eloquent-subquery-selects.mdrules/eloquent-where-has-optimization.mdrules/eloquent-with-count-aggregates.mdrules/index-composite-indexes.mdComprehensive database optimization guide for Laravel 13 applications. Contains 33 rules across 9 categories for writing performant database queries, proper indexing, efficient caching, naming conventions, and debugging slow queries in Laravel 13.
Reference these guidelines when:
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Query Performance & N+1 | CRITICAL | query- |
| 2 | Indexing Strategies | CRITICAL | index- |
| 3 | Eloquent Optimization | HIGH | eloquent- |
| 4 | Caching with Redis | HIGH | cache- |
| 5 | Pagination & Large Datasets | HIGH | data- |
| 6 | Transactions & Locking | HIGH | lock- |
| 7 | Migrations | HIGH | migrate- |
| 8 | Query Debugging | MEDIUM | debug- |
| 9 | Naming & Structure | HIGH | naming- |
query-eager-loading - Use eager loading to eliminate N+1 queriesquery-prevent-lazy-loading - Prevent lazy loading in developmentquery-auto-eager-loading - Configure automatic eager loading on modelsquery-select-columns - Select only needed columns instead of SELECT *index-foreign-keys - Index all foreign key columnsindex-composite-indexes - Create composite indexes for multi-column queriesindex-covering-indexes - Use covering indexes for read-heavy queriesindex-full-text - Use full-text indexes for search functionalityeloquent-query-builder-hot-paths - Use query builder for performance-critical pathseloquent-with-count-aggregates - Use withCount instead of loading relations to counteloquent-subquery-selects - Use subquery selects to avoid extra querieseloquent-where-has-optimization - Optimize whereHas with whereIn subqueriescache-remember - Use Cache::remember for expensive queriescache-invalidation - Invalidate cache on model changescache-tags - Use cache tags for group invalidationcache-ttl - Set appropriate TTL values for cached datadata-cursor-pagination - Use cursor pagination for large datasetsdata-chunk-by-id - Process large datasets with chunkByIddata-cursor-iteration - Use lazy cursors for memory-efficient iterationdata-avoid-unbounded - Never use unbounded queries on large tableslock-short-transactions - Keep transactions short and focusedlock-deadlock-retry - Implement deadlock retry logiclock-pessimistic-locking - Use pessimistic locking for critical updatesmigrate-zero-downtime - Write zero-downtime migrationsmigrate-concurrent-indexes - Create indexes concurrently in productionmigrate-safe-column-additions - Add columns safely without locking tablesdebug-explain-analyze - Use EXPLAIN ANALYZE to understand query plansdebug-laravel-debugbar - Use Laravel Debugbar to find query bottlenecksdebug-slow-query-log - Enable and monitor slow query logsnaming-tables - Table naming conventions (plural snake_case, pivot alphabetical)naming-columns - Column naming conventions (FKs, booleans, timestamps, polymorphic)naming-relationships - Relationship method naming (singular/plural matching)naming-migrations - Migration and index naming conventions<?php
namespace App\Providers;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Model::preventLazyLoading(!app()->isProduction());
}
}
<?php
use Illuminate\Support\Facades\Cache;
// Cache a query result for 1 hour (3600 seconds)
$popularPosts = Cache::remember('posts:popular', 3600, fn () =>
Post::query()
->withCount('comments')
->orderByDesc('comments_count')
->take(10)
->get()
);
<?php
// Cursor pagination — efficient for infinite scroll and large tables
$posts = Post::query()
->where('published_at', '<=', now())
->orderByDesc('published_at')
->cursorPaginate(15);
<?php
// Instead of loading all posts just to count them
$users = User::withCount('posts')->get();
foreach ($users as $user) {
echo "{$user->name} has {$user->posts_count} posts";
}
<?php
// Memory-efficient processing of large tables
User::query()
->where('last_login_at', '<', now()->subYear())
->chunkById(1000, function ($users) {
foreach ($users as $user) {
$user->update(['status' => 'inactive']);
}
});
<?php
use Illuminate\Support\Facades\DB;
// Keep transactions short and focused
DB::transaction(function () {
$order = Order::create([
'user_id' => auth()->id(),
'total' => $this->calculateTotal(),
]);
$order->items()->createMany($this->cartItems());
$order->user->decrement('credits', $order->total);
});
Read individual rule files for detailed explanations and code examples:
rules/query-eager-loading.md
rules/index-composite-indexes.md
rules/cache-remember.md
rules/_sections.md
Each rule file contains:
For the complete guide with all rules expanded: AGENTS.md
npx claudepluginhub noppu-labs/ai-toolkit --plugin laravelGuides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
Resolves in-progress git merge or rebase conflicts by analyzing history, understanding intent, and preserving both changes where possible. Runs automated checks after resolution.