Top 5 de la semana

Publicidad

Artículos relacionados

Guía de Laravel 12 con caso de uso de ejemplo

Aunque han pasado unos días desde que en febrero se lanzó Laravel 12 (tal como anunciamos en nuestro anterior post), hemos querido hacer un repaso especial a las novedades que esta nueva versión nos presenta. Para ello, además de mostrarte las principales mejoras, te presentamos un caso de uso realista en el que hemos aplicado las nuevas funcionalidades. Esta guía de Laravel 12 te ayudará a comprender mejor las nuevas características y cómo aplicarlas en tu próximo proyecto.

¿Quieres ver el anuncio oficial? Puedes consultar la noticia del lanzamiento de Laravel 12 aquí.

Novedades principales de Laravel 12

Laravel 12 trae principalmente mejoras incrementales que facilitan el trabajo diario de los desarrolladores:

  • Uso de UUID v7 como identificadores únicos ordenados cronológicamente.
  • Nuevo método nestedWhere() en el Query Builder para simplificar consultas complejas.
  • Validación mejorada de archivos, especialmente restringiendo imágenes SVG por defecto.
  • Ejecución paralela optimizada usando Concurrency::run() manteniendo claves asociativas.
  • Colecciones con saltos en range(), permitiendo definir pasos personalizados.
  • Starter Kits renovados con autenticación avanzada lista para usar.

Todo esto se explica con ejemplos en esta guía Laravel 12, pensada para que puedas aplicarlo fácilmente en tus proyectos.

Caso de uso: Aplicación «Gestor de Tareas» usando Laravel 12

Instalación del proyecto

composer create-project laravel/laravel:^12.0 gestor-tareas
npm install && npm run dev
php artisan migrate
php artisan storage:link

Migración para tareas

// database/migrations/create_tasks_table.php
public function up() {
    Schema::create('tasks', function (Blueprint $table) {
        $table->uuid('id')->primary(); // UUID v7 por defecto en Laravel 12
        $table->foreignId('user_id')->constrained()->cascadeOnDelete();
        $table->string('titulo');
        $table->text('descripcion')->nullable();
        $table->string('imagen_path')->nullable();
        $table->timestamps();
    });
}

La columna id usa UUID v7 automáticamente gracias al trait HasUuids, como te sugerimos en esta guía de Laravel 12.

Modelo Task

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Concerns\HasUuids;

class Task extends Model {
    use HasUuids;

    protected $fillable = ['titulo', 'descripcion', 'imagen_path', 'user_id'];

    public function user() {
        return $this->belongsTo(User::class);
    }
}

Aquí el trait HasUuids garantiza que cada tarea creada tenga automáticamente su UUID v7 único.

Controlador de tareas

class TaskController extends Controller {
    public function __construct() {
        $this->middleware('auth');
    }

    public function index() {
        $tareas = Task::where('user_id', auth()->id())->latest()->get();
        return view('tasks.index', compact('tareas'));
    }

    public function store(Request $request) {
        $request->validate([
            'titulo' => 'required|string|max:255',
            'descripcion'=> 'nullable|string',
            'imagen'=> ['nullable', File::image()] // No permite SVG por defecto
        ]);

        $request->mergeIfMissing(['descripcion' => '']);

        $datos = $request->only(['titulo', 'descripcion']);
        if ($request->hasFile('imagen')) {
            $datos['imagen_path'] = $request->file('imagen')->store('imagenes', 'public');
        }

        $datos['user_id'] = Auth::id();

        Task::create($datos);

        return redirect()->route('tasks.index')->with('success', 'Tarea creada.');
    }
}

Aquí ves validación avanzada (sin SVG), asignación automática del usuario autenticado y el uso del método mergeIfMissing().

Uso del método nestedWhere() en Laravel 12

¿Quieres consultas más limpias? Ahora es más fácil:

$tareasImportantes = Task::nestedWhere(
    'prioridad', '=', 'alta', 'or', 'fecha_limite', '<', now()->addDays(7)
)->get();

Con nestedWhere() puedes combinar condiciones de forma sencilla y ordenada, tal como te proponemos en esta guía de Laravel 12.

Comando para ejecutar tareas concurrentes en Laravel 12

class ComputeStats extends Command {
    protected $signature = 'compute:stats';

    public function handle() {
        $resultados = Concurrency::run([
            'conteo_tareas' => fn() => DB::table('tasks')->count(),
            'calculo_matematico' => fn() => array_sum(range(1, 1000000)),
        ]);

        foreach ($resultados as $clave => $valor) {
            $this->info("{$clave}: {$valor}");
        }
    }
}

Esta nueva ejecución paralela en Laravel 12 es muy útil para tareas pesadas o procesos simultáneos.

Método range() mejorado en colecciones

Ahora puedes generar rangos personalizados fácilmente:

$numeros = Collection::range(1, 10, 2)->all(); // [1,3,5,7,9]

Otra pequeña joya que facilita el día a día, como detallamos en esta guía Laravel 12.

Prueba unitaria usando Pest PHP v3

use App\Models\Task;
use App\Models\User;

test('crear tarea genera UUID v7', function () {
    $user = User::factory()->create();
    $this->actingAs($user);

    $this->post('/tasks', ['titulo' => 'Ejemplo']);
    $tarea = Task::first();

    expect($tarea->id)->toBeUuid();
});

Así puedes comprobar fácilmente que tus tareas se están creando correctamente con UUID v7.

Cómo ejecutar el proyecto localmente

Sigue estos pasos:

composer install
npm install && npm run dev
php artisan migrate
php artisan storage:link
php artisan serve

Y para probar el comando concurrente:

php artisan compute:stats

Así de sencillo gracias a las mejoras de Laravel 12 que te hemos resumido en esta guía.


¿Te ha gustado esta guía Laravel 12?
Si quieres profundizar aún más, no te pierdas la documentación oficial de Laravel 12.

Normas para comentar

Este espacio está abierto a todo el mundo, pero para que funcione bien necesitamos un poco de sentido común. No se permiten comentarios ofensivos, spam, ni enlaces promocionales. Respeta a los demás, escribe con educación y trata de aportar al tema.

Los comentarios que no sigan estas normas serán eliminados.

Gracias por mantener un buen ambiente.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí