2 visitas

Laravel Eloquent: Obtener un Array con ID como Llave y Columnas Concatenadas

Cuando trabajamos con Eloquent en Laravel, muchas veces necesitamos transformar los resultados de una consulta en un array con una estructura específica. En este caso, queremos que la clave del array sea el id del registro y que el valor sea una concatenación de varias columnas.

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! 🚀

Laravel Eloquent: Obtener un Array con ID como Llave y Columnas Concatenadas
11 February 2025

Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.

Alejandro Leone
Backend Developer