CARACTERÍSTICAS OCULTAS DE LARAVEL
- Route Binding: En vez de hacer esto todo el tiempo:
Laravel puede inyectar el modelo automáticamente:Route::get('/posts/{id}', function ($id) { $post = Post::findOrFail($id); // ... });
Se pueden crear bindings personalizados en "AppServiceProvider":Route::get('/posts/{post:slug}', [PostController::class, 'show']); // Laravel busca automáticamente por el campo 'slug'
Route::bind('post', fn ($value) => Post::where('slug', $value)->firstOrFail - Lazy Collections: Cuando trabajas con miles o millones de registros, get() te mata la memoria.
Es ideal para exports masivos, migraciones y procesamiento de datos grandes.// Antes (boom de memoria) $users = User::where('active', true)->get(); // Ahora (usa generadores de PHP) User::where('active', true)->lazy()->each(function ($user) { // procesa uno por uno sin cargar todo $user->sendWelcomeEmail(); }); - El Helper tap(): Es el helper más infravalorado de Laravel. Ejemplo
También funciona con colecciones y objetos existentes:// Sin tap() $user = new User(); $user->name = 'Juan'; $user->save(); return $user; // Con tap() (más limpio y fluido) $user = tap(new User, function ($user) { $user->name = 'Juan'; $user->save(); });
$user = tap($user, fn ($u) => $u->update(['verified' => true])); - Consultas Condicionales: Alternativa a los "if". Limpio, legible y perfecto para filtros dinámicos. Ejemplo
$query = User::query(); $query->when($request->filled('role'), fn ($q) => $q->where('role', $request->role) ); $query->when($request->has('active'), fn ($q) => $q->where('active', true) ); $users = $query->get(); - Attribute Casting: Evita la conversión manual de booleanos, fechas o JSON.
En cualquier modelo:
Ahora se puede hacer:protected $casts = [ 'is_active' => 'boolean', 'price'=> 'decimal:2', 'meta' => 'array', 'published_at' => 'datetime', 'options' => 'encrypted', // ¡Laravel 10+! ];
if ($user->is_active) { ... } // ya es boolean real $user->meta['theme'] = 'dark'; // array mutable - Blade "@once": Evita de que se dupliquen scripts o estilos cuando se usan componentes en bucles. Es perfecto para analytics, modales, WebSockets o estilos críticos:
@once @endonce - Mensajes de Orden Superior en Colecciones
// En vez de esto $users->each(function ($user) { $user->sendEmail(); }); // Haz esto (¡una sola línea!) $users->each->sendEmail(); //También funciona con: $users->map->fullName(); $users->filter->isActive(); $users->each->update(['last_login' => now()]);