Volver al blog Laravel

Laravel Eloquent: Obtener un Array con ID como Llave

Transformar resultados de Eloquent en un array con estructura específica.

10 enero 2025
Eloquent mapWithKeys

Ejemplo Práctico

Supongamos que tenemos un modelo Property con las columnas name y location, y queremos obtener un array con el siguiente formato:

[
    1 => "Casa en el centro - Buenos Aires",
    2 => "Departamento moderno - Córdoba"
]

Solución con Eloquent

Podemos lograr esto utilizando mapWithKeys() de Laravel:

$properties = Property::all()->mapWithKeys(fn($p) => [
    $p->id => "{$p->name} - {$p->location}"
])->toArray();

Con este enfoque:

  • Se obtiene toda la colección de registros.
  • Se mapea la colección convirtiéndola en un array asociativo donde el id es la clave y el valor es la concatenación de las columnas.
  • Se usa toArray() para convertir la colección en un array puro.

Optimizando la Consulta

Para mejorar el rendimiento, especialmente en bases de datos grandes, podemos reducir las columnas seleccionadas con select() y usar get() en lugar de all():

$properties = Property::select('id', 'name', 'location')
    ->get()
    ->mapWithKeys(fn($p) => [$p->id => "{$p->name} - {$p->location}"])
    ->toArray();

¿Cuándo Usar Este Método?

Este enfoque es útil cuando:

  • Necesitás transformar una colección en un array clave-valor.
  • Querés mostrar opciones en un select HTML.
  • Estás generando datos estructurados para una API o frontend.

¡Espero que esta solución te ayude en tu próximo proyecto Laravel! 🚀